EDU.oswego.cs.dl.util.concurrent
Class SynchronizedRef
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. ]
Constructor Summary |
| SynchronizedRef(Object initialValue)
Create a SynchronizedRef initially holding the given reference
and using its own internal lock.
|
| SynchronizedRef(Object initialValue, Object lock)
Make a new SynchronizedRef with the given initial value,
and using the supplied lock.
|
Method Summary |
boolean | commit(Object assumedValue, Object newValue)
Set value to newValue only if it is currently assumedValue. |
Object | get()
Return the current value
|
Object | set(Object newValue)
Set to newValue. |
Object | swap(SynchronizedRef other)
Atomically swap values with another SynchronizedRef.
|
protected Object value_
The maintained reference *
public SynchronizedRef(Object initialValue)
Create a SynchronizedRef initially holding the given reference
and using its own internal lock.
public SynchronizedRef(Object initialValue, Object lock)
Make a new SynchronizedRef with the given initial value,
and using the supplied lock.
public boolean commit(Object assumedValue, Object newValue)
Set value to newValue only if it is currently assumedValue.
Returns: true if successful
public final Object get()
Return the current value
public Object set(Object newValue)
Set to newValue.
Returns: the old value
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