java.lang.Object
org.ematgine.utils.concurrent.SynchronizedVariable
org.ematgine.utils.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. ]
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
value_
protected java.lang.Object value_
- The maintained reference
SynchronizedRef
public SynchronizedRef(java.lang.Object initialValue)
- Create a SynchronizedRef initially holding the given reference
and using its own internal lock.
SynchronizedRef
public SynchronizedRef(java.lang.Object initialValue,
java.lang.Object lock)
- Make a new SynchronizedRef with the given initial value,
and using the supplied lock.
get
public final java.lang.Object get()
- Return the current value
set
public java.lang.Object set(java.lang.Object newValue)
- Set to newValue.
commit
public boolean commit(java.lang.Object assumedValue,
java.lang.Object newValue)
- Set value to newValue only if it is currently assumedValue.
swap
public java.lang.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.)