271 |
|
* only be seen after publication via casNext or casPrev. |
272 |
|
*/ |
273 |
|
Node(E item) { |
274 |
< |
UNSAFE.putObject(this, itemOffset, item); |
274 |
> |
U.putObject(this, ITEM, item); |
275 |
|
} |
276 |
|
|
277 |
|
boolean casItem(E cmp, E val) { |
278 |
< |
return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val); |
278 |
> |
return U.compareAndSwapObject(this, ITEM, cmp, val); |
279 |
|
} |
280 |
|
|
281 |
|
void lazySetNext(Node<E> val) { |
282 |
< |
UNSAFE.putOrderedObject(this, nextOffset, val); |
282 |
> |
U.putOrderedObject(this, NEXT, val); |
283 |
|
} |
284 |
|
|
285 |
|
boolean casNext(Node<E> cmp, Node<E> val) { |
286 |
< |
return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val); |
286 |
> |
return U.compareAndSwapObject(this, NEXT, cmp, val); |
287 |
|
} |
288 |
|
|
289 |
|
void lazySetPrev(Node<E> val) { |
290 |
< |
UNSAFE.putOrderedObject(this, prevOffset, val); |
290 |
> |
U.putOrderedObject(this, PREV, val); |
291 |
|
} |
292 |
|
|
293 |
|
boolean casPrev(Node<E> cmp, Node<E> val) { |
294 |
< |
return UNSAFE.compareAndSwapObject(this, prevOffset, cmp, val); |
294 |
> |
return U.compareAndSwapObject(this, PREV, cmp, val); |
295 |
|
} |
296 |
|
|
297 |
|
// Unsafe mechanics |
298 |
|
|
299 |
< |
private static final sun.misc.Unsafe UNSAFE; |
300 |
< |
private static final long prevOffset; |
301 |
< |
private static final long itemOffset; |
302 |
< |
private static final long nextOffset; |
299 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
300 |
> |
private static final long PREV; |
301 |
> |
private static final long ITEM; |
302 |
> |
private static final long NEXT; |
303 |
|
|
304 |
|
static { |
305 |
|
try { |
306 |
< |
UNSAFE = sun.misc.Unsafe.getUnsafe(); |
307 |
< |
Class<?> k = Node.class; |
308 |
< |
prevOffset = UNSAFE.objectFieldOffset |
309 |
< |
(k.getDeclaredField("prev")); |
310 |
< |
itemOffset = UNSAFE.objectFieldOffset |
311 |
< |
(k.getDeclaredField("item")); |
312 |
< |
nextOffset = UNSAFE.objectFieldOffset |
313 |
< |
(k.getDeclaredField("next")); |
306 |
> |
PREV = U.objectFieldOffset |
307 |
> |
(Node.class.getDeclaredField("prev")); |
308 |
> |
ITEM = U.objectFieldOffset |
309 |
> |
(Node.class.getDeclaredField("item")); |
310 |
> |
NEXT = U.objectFieldOffset |
311 |
> |
(Node.class.getDeclaredField("next")); |
312 |
|
} catch (ReflectiveOperationException e) { |
313 |
|
throw new Error(e); |
314 |
|
} |
1542 |
|
} |
1543 |
|
|
1544 |
|
private boolean casHead(Node<E> cmp, Node<E> val) { |
1545 |
< |
return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val); |
1545 |
> |
return U.compareAndSwapObject(this, HEAD, cmp, val); |
1546 |
|
} |
1547 |
|
|
1548 |
|
private boolean casTail(Node<E> cmp, Node<E> val) { |
1549 |
< |
return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val); |
1549 |
> |
return U.compareAndSwapObject(this, TAIL, cmp, val); |
1550 |
|
} |
1551 |
|
|
1552 |
|
// Unsafe mechanics |
1553 |
|
|
1554 |
< |
private static final sun.misc.Unsafe UNSAFE; |
1555 |
< |
private static final long headOffset; |
1556 |
< |
private static final long tailOffset; |
1554 |
> |
private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe(); |
1555 |
> |
private static final long HEAD; |
1556 |
> |
private static final long TAIL; |
1557 |
|
static { |
1558 |
|
PREV_TERMINATOR = new Node<Object>(); |
1559 |
|
PREV_TERMINATOR.next = PREV_TERMINATOR; |
1560 |
|
NEXT_TERMINATOR = new Node<Object>(); |
1561 |
|
NEXT_TERMINATOR.prev = NEXT_TERMINATOR; |
1562 |
|
try { |
1563 |
< |
UNSAFE = sun.misc.Unsafe.getUnsafe(); |
1564 |
< |
Class<?> k = ConcurrentLinkedDeque.class; |
1565 |
< |
headOffset = UNSAFE.objectFieldOffset |
1566 |
< |
(k.getDeclaredField("head")); |
1569 |
< |
tailOffset = UNSAFE.objectFieldOffset |
1570 |
< |
(k.getDeclaredField("tail")); |
1563 |
> |
HEAD = U.objectFieldOffset |
1564 |
> |
(ConcurrentLinkedDeque.class.getDeclaredField("head")); |
1565 |
> |
TAIL = U.objectFieldOffset |
1566 |
> |
(ConcurrentLinkedDeque.class.getDeclaredField("tail")); |
1567 |
|
} catch (ReflectiveOperationException e) { |
1568 |
|
throw new Error(e); |
1569 |
|
} |