Class LinkedTransferQueue.Node
- java.lang.Object
-
- org.glassfish.jersey.internal.util.collection.LinkedTransferQueue.Node
-
- Enclosing class:
- LinkedTransferQueue<E>
static final class LinkedTransferQueue.Node extends java.lang.ObjectQueue nodes. Uses Object, not E, for items to allow forgetting them after use. Relies heavily on Unsafe mechanics to minimize unnecessary ordering constraints: Writes that are intrinsically ordered wrt other accesses or CASes use simple relaxed forms.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) booleanisData(package private) java.lang.Objectitemprivate static longitemOffset(package private) LinkedTransferQueue.Nodenextprivate static longnextOffsetprivate static longserialVersionUIDprivate static sun.misc.UnsafeUNSAFE(package private) java.lang.Threadwaiterprivate static longwaiterOffset
-
Constructor Summary
Constructors Constructor Description Node(java.lang.Object item, boolean isData)Constructs a new node.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) booleancannotPrecede(boolean haveData)Returns true if a node with the given mode cannot be appended to this node because this node is unmatched and has opposite data mode.(package private) booleancasItem(java.lang.Object cmp, java.lang.Object val)(package private) booleancasNext(LinkedTransferQueue.Node cmp, LinkedTransferQueue.Node val)(package private) voidforgetContents()Sets item to self and waiter to null, to avoid garbage retention after matching or cancelling.(package private) voidforgetNext()Links node to itself to avoid garbage retention.(package private) booleanisMatched()Returns true if this node has been matched, including the case of artificial matches due to cancellation.(package private) booleanisUnmatchedRequest()Returns true if this is an unmatched request node.(package private) booleantryMatchData()Tries to artificially match a data node -- used by remove.
-
-
-
Field Detail
-
isData
final boolean isData
-
item
volatile java.lang.Object item
-
next
volatile LinkedTransferQueue.Node next
-
waiter
volatile java.lang.Thread waiter
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
UNSAFE
private static final sun.misc.Unsafe UNSAFE
-
itemOffset
private static final long itemOffset
-
nextOffset
private static final long nextOffset
-
waiterOffset
private static final long waiterOffset
-
-
Method Detail
-
casNext
final boolean casNext(LinkedTransferQueue.Node cmp, LinkedTransferQueue.Node val)
-
casItem
final boolean casItem(java.lang.Object cmp, java.lang.Object val)
-
forgetNext
final void forgetNext()
Links node to itself to avoid garbage retention. Called only after CASing head field, so uses relaxed write.
-
forgetContents
final void forgetContents()
Sets item to self and waiter to null, to avoid garbage retention after matching or cancelling. Uses relaxed writes because order is already constrained in the only calling contexts: item is forgotten only after volatile/atomic mechanics that extract items. Similarly, clearing waiter follows either CAS or return from park (if ever parked; else we don't care).
-
isMatched
final boolean isMatched()
Returns true if this node has been matched, including the case of artificial matches due to cancellation.
-
isUnmatchedRequest
final boolean isUnmatchedRequest()
Returns true if this is an unmatched request node.
-
cannotPrecede
final boolean cannotPrecede(boolean haveData)
Returns true if a node with the given mode cannot be appended to this node because this node is unmatched and has opposite data mode.
-
tryMatchData
final boolean tryMatchData()
Tries to artificially match a data node -- used by remove.
-
-