java - Should I be using both lock and volatile? -
my understanding of volatile ensures value read memory, far can see, in next example, myobject
variable need volatile avoid nullpointerexception
beingness raised:
private final object lock = new object(); private myobject myobject = null; //... synchronized (lock) { if (myobject == null) { myobject = new myobject(); } myobject.blah(); // other stuff want synchronized }
myobject
ever touched in synchronized block. lock
every used synchronize block.
is correct?
so rephrased slightly, question is...imagine 2 threads hitting code. first thread locks , sets myobject, calls .blah()
, other code within synchronized block , exits synchronized block. allows thread 2 come in synchronized block. without setting myobject
volatile, there chance still evaluate myobject == null
true
?
the synchronized
block ensure updates memory seen other threads. there no need create myobject
volatile.
from intrinsic locks , synchronization:
when thread releases intrinsic lock, happens-before relationship established between action , subsequent acquistion of same lock.
java locking volatile
No comments:
Post a Comment