Class Sequence

  • Direct Known Subclasses:
    FixedSequenceGroup, SequenceGroup

    public class Sequence
    extends java.lang.Object
    Concurrent sequence class used for tracking the progress of the ring buffer and event processors. Support a number of concurrent operations including CAS and order writes.

    Also attempts to be more efficient with regards to false sharing by adding padding around the volatile field.

    • Constructor Summary

      Constructors 
      Constructor Description
      Sequence()
      Create a sequence initialised to -1.
      Sequence​(long initialValue)
      Create a sequence with a specified initial value.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      long addAndGet​(long increment)
      Atomically add the supplied value.
      boolean compareAndSet​(long expectedValue, long newValue)
      Perform a compare and set operation on the sequence.
      long get()
      Perform a volatile read of this sequence's value.
      long getAndAdd​(long increment)
      Perform an atomic getAndAdd operation on the sequence.
      long incrementAndGet()
      Atomically increment the sequence by one.
      void set​(long value)
      Perform an ordered write of this sequence.
      void setVolatile​(long value)
      Performs a volatile write of this sequence.
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • Sequence

        public Sequence()
        Create a sequence initialised to -1.
      • Sequence

        public Sequence​(long initialValue)
        Create a sequence with a specified initial value.
        Parameters:
        initialValue - The initial value for this sequence.
    • Method Detail

      • get

        public long get()
        Perform a volatile read of this sequence's value.
        Returns:
        The current value of the sequence.
      • set

        public void set​(long value)
        Perform an ordered write of this sequence. The intent is a Store/Store barrier between this write and any previous store.
        Parameters:
        value - The new value for the sequence.
      • setVolatile

        public void setVolatile​(long value)
        Performs a volatile write of this sequence. The intent is a Store/Store barrier between this write and any previous write and a Store/Load barrier between this write and any subsequent volatile read.
        Parameters:
        value - The new value for the sequence.
      • compareAndSet

        public boolean compareAndSet​(long expectedValue,
                                     long newValue)
        Perform a compare and set operation on the sequence.
        Parameters:
        expectedValue - The expected current value.
        newValue - The value to update to.
        Returns:
        true if the operation succeeds, false otherwise.
      • incrementAndGet

        public long incrementAndGet()
        Atomically increment the sequence by one.
        Returns:
        The value after the increment
      • addAndGet

        public long addAndGet​(long increment)
        Atomically add the supplied value.
        Parameters:
        increment - The value to add to the sequence.
        Returns:
        The value after the increment.
      • getAndAdd

        public long getAndAdd​(long increment)
        Perform an atomic getAndAdd operation on the sequence.
        Parameters:
        increment - The value to add to the sequence.
        Returns:
        the value before increment
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object