Class Sequence

Direct Known Subclasses:
FixedSequenceGroup, NoOpEventProcessor.SequencerFollowingSequence, SequenceGroup

public class Sequence extends RhsPadding
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.

  • Field Details

  • Constructor Details

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

    • 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 String toString()
      Overrides:
      toString in class Object