43 |
|
|
44 |
|
// Atomics support |
45 |
|
|
46 |
< |
private static final AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode> tailUpdater = new AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode>(ConcurrentLinkedQueue.class, AtomicLinkedNode.class, "tail"); |
47 |
< |
private static final AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode> headUpdater = new AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode>(ConcurrentLinkedQueue.class, AtomicLinkedNode.class, "head"); |
46 |
> |
private static final |
47 |
> |
AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode> |
48 |
> |
tailUpdater = |
49 |
> |
AtomicReferenceFieldUpdater.newUpdater |
50 |
> |
(ConcurrentLinkedQueue.class, AtomicLinkedNode.class, "tail"); |
51 |
> |
private static final |
52 |
> |
AtomicReferenceFieldUpdater<ConcurrentLinkedQueue, AtomicLinkedNode> |
53 |
> |
headUpdater = |
54 |
> |
AtomicReferenceFieldUpdater.newUpdater |
55 |
> |
(ConcurrentLinkedQueue.class, AtomicLinkedNode.class, "head"); |
56 |
|
|
57 |
|
private boolean casTail(AtomicLinkedNode cmp, AtomicLinkedNode val) { |
58 |
|
return tailUpdater.compareAndSet(this, cmp, val); |