@@ -49,39 +49,39 @@ abstract class AbstractFutureState<V extends @Nullable Object> extends InternalF
49
49
implements ListenableFuture <V > {
50
50
/**
51
51
* Performs a {@linkplain java.lang.invoke.VarHandle#compareAndSet compare-and-set} operation on
52
- * the {@link #listeners} field .
52
+ * {@link #listenersField} .
53
53
*/
54
54
final boolean casListeners (@ Nullable Listener expect , Listener update ) {
55
55
return ATOMIC_HELPER .casListeners (this , expect , update );
56
56
}
57
57
58
58
/**
59
- * Performs a {@linkplain java.lang.invoke.VarHandle#getAndSet get-and-set} operation on the
60
- * {@link #listeners} field. .
59
+ * Performs a {@linkplain java.lang.invoke.VarHandle#getAndSet get-and-set} operation on {@link
60
+ * #listenersField} .
61
61
*/
62
62
final @ Nullable Listener gasListeners (Listener update ) {
63
63
return ATOMIC_HELPER .gasListeners (this , update );
64
64
}
65
65
66
66
/**
67
67
* Performs a {@linkplain java.lang.invoke.VarHandle#compareAndSet compare-and-set} operation on
68
- * the {@link #value} field of {@code future}.
68
+ * {@link #valueField} of {@code future}.
69
69
*/
70
70
static boolean casValue (AbstractFutureState <?> future , @ Nullable Object expect , Object update ) {
71
71
return ATOMIC_HELPER .casValue (future , expect , update );
72
72
}
73
73
74
74
/** Returns the value of the future, using a volatile read. */
75
75
final @ Nullable Object value () {
76
- return value ;
76
+ return valueField ;
77
77
}
78
78
79
79
/** Returns the head of the listener stack, using a volatile read. */
80
80
final @ Nullable Listener listeners () {
81
- return listeners ;
81
+ return listenersField ;
82
82
}
83
83
84
- /** Releases all threads in the {@link #waiters } list, and clears the list. */
84
+ /** Releases all threads in the {@link #waitersField } list, and clears the list. */
85
85
final void releaseWaiters () {
86
86
Waiter head = gasWaiters (Waiter .TOMBSTONE );
87
87
for (Waiter currentWaiter = head ; currentWaiter != null ; currentWaiter = currentWaiter .next ) {
@@ -92,10 +92,10 @@ final void releaseWaiters() {
92
92
// Gets and Timed Gets
93
93
//
94
94
// * Be responsive to interruption
95
- // * Don't create Waiter nodes if you aren't going to park, this helps reduce contention on the
96
- // waiters field .
97
- // * Future completion is defined by when #value becomes non-null/non DelegatingToFuture
98
- // * Future completion can be observed if the waiters field contains a TOMBSTONE
95
+ // * Don't create Waiter nodes if you aren't going to park, this helps reduce contention on
96
+ // waitersField .
97
+ // * Future completion is defined by when #valueField becomes non-null/non DelegatingToFuture
98
+ // * Future completion can be observed if the waitersField field contains a TOMBSTONE
99
99
100
100
// Timed Get
101
101
// There are a few design constraints to consider
@@ -127,15 +127,15 @@ final V blockingGet(long timeout, TimeUnit unit)
127
127
if (Thread .interrupted ()) {
128
128
throw new InterruptedException ();
129
129
}
130
- @ RetainedLocalRef Object localValue = value ;
130
+ @ RetainedLocalRef Object localValue = valueField ;
131
131
if (localValue != null & notInstanceOfDelegatingToFuture (localValue )) {
132
132
return getDoneValue (localValue );
133
133
}
134
134
// we delay calling nanoTime until we know we will need to either park or spin
135
135
long endNanos = remainingNanos > 0 ? System .nanoTime () + remainingNanos : 0 ;
136
136
long_wait_loop :
137
137
if (remainingNanos >= SPIN_THRESHOLD_NANOS ) {
138
- Waiter oldHead = waiters ;
138
+ Waiter oldHead = waitersField ;
139
139
if (oldHead != Waiter .TOMBSTONE ) {
140
140
Waiter node = new Waiter ();
141
141
do {
@@ -151,7 +151,7 @@ final V blockingGet(long timeout, TimeUnit unit)
151
151
152
152
// Otherwise re-read and check doneness. If we loop then it must have been a spurious
153
153
// wakeup
154
- localValue = value ;
154
+ localValue = valueField ;
155
155
if (localValue != null & notInstanceOfDelegatingToFuture (localValue )) {
156
156
return getDoneValue (localValue );
157
157
}
@@ -165,18 +165,18 @@ final V blockingGet(long timeout, TimeUnit unit)
165
165
}
166
166
}
167
167
}
168
- oldHead = waiters ; // re-read and loop.
168
+ oldHead = waitersField ; // re-read and loop.
169
169
} while (oldHead != Waiter .TOMBSTONE );
170
170
}
171
- // re-read value , if we get here then we must have observed a TOMBSTONE while trying to add a
172
- // waiter.
173
- // requireNonNull is safe because value is always set before TOMBSTONE.
174
- return getDoneValue (requireNonNull (value ));
171
+ // re-read valueField , if we get here then we must have observed a TOMBSTONE while trying to
172
+ // add a waiter.
173
+ // requireNonNull is safe because valueField is always set before TOMBSTONE.
174
+ return getDoneValue (requireNonNull (valueField ));
175
175
}
176
176
// If we get here then we have remainingNanos < SPIN_THRESHOLD_NANOS and there is no node on the
177
177
// waiters list
178
178
while (remainingNanos > 0 ) {
179
- localValue = value ;
179
+ localValue = valueField ;
180
180
if (localValue != null & notInstanceOfDelegatingToFuture (localValue )) {
181
181
return getDoneValue (localValue );
182
182
}
@@ -226,11 +226,11 @@ final V blockingGet() throws InterruptedException, ExecutionException {
226
226
if (Thread .interrupted ()) {
227
227
throw new InterruptedException ();
228
228
}
229
- @ RetainedLocalRef Object localValue = value ;
229
+ @ RetainedLocalRef Object localValue = valueField ;
230
230
if (localValue != null & notInstanceOfDelegatingToFuture (localValue )) {
231
231
return getDoneValue (localValue );
232
232
}
233
- Waiter oldHead = waiters ;
233
+ Waiter oldHead = waitersField ;
234
234
if (oldHead != Waiter .TOMBSTONE ) {
235
235
Waiter node = new Waiter ();
236
236
do {
@@ -246,19 +246,19 @@ final V blockingGet() throws InterruptedException, ExecutionException {
246
246
}
247
247
// Otherwise re-read and check doneness. If we loop then it must have been a spurious
248
248
// wakeup
249
- localValue = value ;
249
+ localValue = valueField ;
250
250
if (localValue != null & notInstanceOfDelegatingToFuture (localValue )) {
251
251
return getDoneValue (localValue );
252
252
}
253
253
}
254
254
}
255
- oldHead = waiters ; // re-read and loop.
255
+ oldHead = waitersField ; // re-read and loop.
256
256
} while (oldHead != Waiter .TOMBSTONE );
257
257
}
258
- // re-read value , if we get here then we must have observed a TOMBSTONE while trying to add a
259
- // waiter.
260
- // requireNonNull is safe because value is always set before TOMBSTONE.
261
- return getDoneValue (requireNonNull (value ));
258
+ // re-read valueField , if we get here then we must have observed a TOMBSTONE while trying to add
259
+ // a waiter.
260
+ // requireNonNull is safe because valueField is always set before TOMBSTONE.
261
+ return getDoneValue (requireNonNull (valueField ));
262
262
}
263
263
264
264
/** Constructor for use by {@link AbstractFuture}. */
@@ -296,7 +296,7 @@ final V blockingGet() throws InterruptedException, ExecutionException {
296
296
GENERATE_CANCELLATION_CAUSES = generateCancellationCauses ;
297
297
}
298
298
299
- /** Waiter links form a Treiber stack, in the {@link #waiters} field . */
299
+ /** Waiter links form a Treiber stack in {@link #waitersField} . */
300
300
static final class Waiter {
301
301
static final Waiter TOMBSTONE = new Waiter (false /* ignored param */ );
302
302
@@ -310,12 +310,12 @@ static final class Waiter {
310
310
Waiter (boolean unused ) {}
311
311
312
312
Waiter () {
313
- // avoid volatile write, write is made visible by subsequent CAS on waiters field
313
+ // avoid volatile write, write is made visible by subsequent CAS on waitersField field
314
314
putThread (this , Thread .currentThread ());
315
315
}
316
316
317
- // non-volatile write to the next field. Should be made visible by subsequent CAS on waiters
318
- // field .
317
+ // non-volatile write to the next field. Should be made visible by a subsequent CAS on
318
+ // waitersField .
319
319
void setNext (@ Nullable Waiter next ) {
320
320
putNext (this , next );
321
321
}
@@ -380,8 +380,8 @@ void unpark() {
380
380
}
381
381
}
382
382
383
- // TODO(lukes): investigate using the @Contended annotation on these fields when jdk8 is
384
- // available.
383
+ // TODO(lukes): Investigate using a @Contended annotation on these fields once one is available.
384
+
385
385
/**
386
386
* This field encodes the current state of the future.
387
387
*
@@ -397,13 +397,13 @@ void unpark() {
397
397
* argument.
398
398
* </ul>
399
399
*/
400
- private volatile @ Nullable Object value ;
400
+ private volatile @ Nullable Object valueField ;
401
401
402
402
/** All listeners. */
403
- private volatile @ Nullable Listener listeners ;
403
+ private volatile @ Nullable Listener listenersField ;
404
404
405
405
/** All waiting threads. */
406
- private volatile @ Nullable Waiter waiters ;
406
+ private volatile @ Nullable Waiter waitersField ;
407
407
408
408
/** Non-volatile write of the thread to the {@link Waiter#thread} field. */
409
409
private static void putThread (Waiter waiter , Thread newValue ) {
@@ -416,16 +416,16 @@ private static void putNext(Waiter waiter, @Nullable Waiter newValue) {
416
416
}
417
417
418
418
/**
419
- * Performs a {@linkplain java.lang.invoke.VarHandle#compareAndSet compare-and-set} operation on
420
- * the {@link #waiters} field .
419
+ * Performs a {@linkplain java.lang.invoke.VarHandle#compareAndSet compare-and-set} operation
420
+ * {@link #waitersField} .
421
421
*/
422
422
private boolean casWaiters (@ Nullable Waiter expect , @ Nullable Waiter update ) {
423
423
return ATOMIC_HELPER .casWaiters (this , expect , update );
424
424
}
425
425
426
426
/**
427
- * Performs a {@linkplain java.lang.invoke.VarHandle#getAndSet get-and-set} operation on the
428
- * {@link #waiters} field .
427
+ * Performs a {@linkplain java.lang.invoke.VarHandle#getAndSet get-and-set} operation on {@link
428
+ * #waitersField} .
429
429
*/
430
430
private final @ Nullable Waiter gasWaiters (Waiter update ) {
431
431
return ATOMIC_HELPER .gasWaiters (this , update );
@@ -447,7 +447,7 @@ private void removeWaiter(Waiter node) {
447
447
restart :
448
448
while (true ) {
449
449
Waiter pred = null ;
450
- Waiter curr = waiters ;
450
+ Waiter curr = waitersField ;
451
451
if (curr == Waiter .TOMBSTONE ) {
452
452
return ; // give up if someone is calling complete
453
453
}
@@ -481,21 +481,21 @@ private abstract static class AtomicHelper {
481
481
/** Non-volatile write of the waiter to the {@link Waiter#next} field. */
482
482
abstract void putNext (Waiter waiter , @ Nullable Waiter newValue );
483
483
484
- /** Performs a CAS operation on the {@link AbstractFutureState#waiters} field . */
484
+ /** Performs a CAS operation on {@link AbstractFutureState#waitersField} . */
485
485
abstract boolean casWaiters (
486
486
AbstractFutureState <?> future , @ Nullable Waiter expect , @ Nullable Waiter update );
487
487
488
- /** Performs a CAS operation on the {@link AbstractFutureState#listeners} field . */
488
+ /** Performs a CAS operation on {@link AbstractFutureState#listenersField} . */
489
489
abstract boolean casListeners (
490
490
AbstractFutureState <?> future , @ Nullable Listener expect , Listener update );
491
491
492
- /** Performs a GAS operation on the {@link AbstractFutureState#waiters} field . */
492
+ /** Performs a GAS operation on {@link AbstractFutureState#waitersField} . */
493
493
abstract @ Nullable Waiter gasWaiters (AbstractFutureState <?> future , Waiter update );
494
494
495
- /** Performs a GAS operation on the {@link AbstractFutureState#listeners} field . */
495
+ /** Performs a GAS operation on {@link AbstractFutureState#listenersField} . */
496
496
abstract @ Nullable Listener gasListeners (AbstractFutureState <?> future , Listener update );
497
497
498
- /** Performs a CAS operation on the {@link AbstractFutureState#value} field . */
498
+ /** Performs a CAS operation on {@link AbstractFutureState#valueField} . */
499
499
abstract boolean casValue (
500
500
AbstractFutureState <?> future , @ Nullable Object expect , Object update );
501
501
}
@@ -541,10 +541,11 @@ private static final class UnsafeAtomicHelper extends AtomicHelper {
541
541
}
542
542
try {
543
543
Class <?> abstractFutureState = AbstractFutureState .class ;
544
- WAITERS_OFFSET = unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("waiters" ));
544
+ WAITERS_OFFSET =
545
+ unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("waitersField" ));
545
546
LISTENERS_OFFSET =
546
- unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("listeners " ));
547
- VALUE_OFFSET = unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("value " ));
547
+ unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("listenersField " ));
548
+ VALUE_OFFSET = unsafe .objectFieldOffset (abstractFutureState .getDeclaredField ("valueField " ));
548
549
WAITER_THREAD_OFFSET = unsafe .objectFieldOffset (Waiter .class .getDeclaredField ("thread" ));
549
550
WAITER_NEXT_OFFSET = unsafe .objectFieldOffset (Waiter .class .getDeclaredField ("next" ));
550
551
UNSAFE = unsafe ;
@@ -578,7 +579,7 @@ boolean casListeners(
578
579
@ Override
579
580
@ Nullable Listener gasListeners (AbstractFutureState <?> future , Listener update ) {
580
581
while (true ) {
581
- Listener listener = future .listeners ;
582
+ Listener listener = future .listenersField ;
582
583
if (update == listener ) {
583
584
return listener ;
584
585
}
@@ -591,7 +592,7 @@ boolean casListeners(
591
592
@ Override
592
593
@ Nullable Waiter gasWaiters (AbstractFutureState <?> future , Waiter update ) {
593
594
while (true ) {
594
- Waiter waiter = future .waiters ;
595
+ Waiter waiter = future .waitersField ;
595
596
if (update == waiter ) {
596
597
return waiter ;
597
598
}
@@ -717,8 +718,8 @@ void putNext(Waiter waiter, @Nullable Waiter newValue) {
717
718
boolean casWaiters (
718
719
AbstractFutureState <?> future , @ Nullable Waiter expect , @ Nullable Waiter update ) {
719
720
synchronized (future ) {
720
- if (future .waiters == expect ) {
721
- future .waiters = update ;
721
+ if (future .waitersField == expect ) {
722
+ future .waitersField = update ;
722
723
return true ;
723
724
}
724
725
return false ;
@@ -729,8 +730,8 @@ boolean casWaiters(
729
730
boolean casListeners (
730
731
AbstractFutureState <?> future , @ Nullable Listener expect , Listener update ) {
731
732
synchronized (future ) {
732
- if (future .listeners == expect ) {
733
- future .listeners = update ;
733
+ if (future .listenersField == expect ) {
734
+ future .listenersField = update ;
734
735
return true ;
735
736
}
736
737
return false ;
@@ -740,9 +741,9 @@ boolean casListeners(
740
741
@ Override
741
742
@ Nullable Listener gasListeners (AbstractFutureState <?> future , Listener update ) {
742
743
synchronized (future ) {
743
- Listener old = future .listeners ;
744
+ Listener old = future .listenersField ;
744
745
if (old != update ) {
745
- future .listeners = update ;
746
+ future .listenersField = update ;
746
747
}
747
748
return old ;
748
749
}
@@ -751,9 +752,9 @@ boolean casListeners(
751
752
@ Override
752
753
@ Nullable Waiter gasWaiters (AbstractFutureState <?> future , Waiter update ) {
753
754
synchronized (future ) {
754
- Waiter old = future .waiters ;
755
+ Waiter old = future .waitersField ;
755
756
if (old != update ) {
756
- future .waiters = update ;
757
+ future .waitersField = update ;
757
758
}
758
759
return old ;
759
760
}
@@ -762,8 +763,8 @@ boolean casListeners(
762
763
@ Override
763
764
boolean casValue (AbstractFutureState <?> future , @ Nullable Object expect , Object update ) {
764
765
synchronized (future ) {
765
- if (future .value == expect ) {
766
- future .value = update ;
766
+ if (future .valueField == expect ) {
767
+ future .valueField = update ;
767
768
return true ;
768
769
}
769
770
return false ;
0 commit comments