Class LinkedTransferQueue.Node

  • Enclosing class:
    LinkedTransferQueue<E>

    static final class LinkedTransferQueue.Node
    extends java.lang.Object
    Queue 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.
    • 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) 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.
      (package private) boolean casItem​(java.lang.Object cmp, java.lang.Object val)  
      (package private) boolean casNext​(LinkedTransferQueue.Node cmp, LinkedTransferQueue.Node val)  
      (package private) void forgetContents()
      Sets item to self and waiter to null, to avoid garbage retention after matching or cancelling.
      (package private) void forgetNext()
      Links node to itself to avoid garbage retention.
      (package private) boolean isMatched()
      Returns true if this node has been matched, including the case of artificial matches due to cancellation.
      (package private) boolean isUnmatchedRequest()
      Returns true if this is an unmatched request node.
      (package private) boolean tryMatchData()
      Tries to artificially match a data node -- used by remove.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • isData

        final boolean isData
      • item

        volatile java.lang.Object item
      • waiter

        volatile java.lang.Thread waiter
      • 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
    • Constructor Detail

      • Node

        Node​(java.lang.Object item,
             boolean isData)
        Constructs a new node. Uses relaxed write because item can only be seen after publication via casNext.
    • Method Detail

      • 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.