Class SynchronizedRef

java.lang.Object
EDU.oswego.cs.dl.util.concurrent.SynchronizedVariable
EDU.oswego.cs.dl.util.concurrent.SynchronizedRef
All Implemented Interfaces:
Executor
Direct Known Subclasses:
WaitableRef

public class SynchronizedRef extends SynchronizedVariable
A simple class maintaining a single reference variable that is always accessed and updated under synchronization.

[ Introduction to this package. ]

  • Field Details

    • value_

      protected Object value_
      The maintained reference
  • Constructor Details

    • SynchronizedRef

      public SynchronizedRef(Object initialValue)
      Create a SynchronizedRef initially holding the given reference and using its own internal lock.
    • SynchronizedRef

      public SynchronizedRef(Object initialValue, Object lock)
      Make a new SynchronizedRef with the given initial value, and using the supplied lock.
  • Method Details

    • get

      public final Object get()
      Return the current value
    • set

      public Object set(Object newValue)
      Set to newValue.
      Returns:
      the old value
    • commit

      public boolean commit(Object assumedValue, Object newValue)
      Set value to newValue only if it is currently assumedValue.
      Returns:
      true if successful
    • swap

      public Object swap(SynchronizedRef other)
      Atomically swap values with another SynchronizedRef. Uses identityHashCode to avoid deadlock when two SynchronizedRefs attempt to simultaneously swap with each other. (Note: Ordering via identyHashCode is not strictly guaranteed by the language specification to return unique, orderable values, but in practice JVMs rely on them being unique.)
      Returns:
      the new value