KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Take this code: public class MyClass { private final Object _lock = new Object(); private final MyMutableClass _mutableObject = new MyMutableClass() public void myMethod() { synchronized(_lock) { // we are synchronizing on instance variable _lock // do something with mutableVar //(i.e. call a "set" method on _mutableObject) } } } now, imagine delegating the code inside myMethod() to some helper class where you pass the lock public class HelperClass { public helperMethod(Object lockVar, MyMutableClass mutableVar) { synchronized(lockVar) { // we are now synchronizing on a method param, // each thread has own copy // do something with mutableVar // (i.e. call a "set" method on mutableVar) } } } can "myMethod" be re-written to use the HelperClass by passing its lock var, so that everything is still thread safe? i.e., public void myMethod() { _helperObject.helperMethod(_lock, _mutableObject); } I am not sure about this, because Java will pass the lockVar by value, and every thread will get a separate copy of lockVar (even though each copy points to the same object on the heap). I guess the question comes down to how 'synchronized' keyword works -- does it lock on the variable, or the value on the heap that the variable references?
Tags (comma-separated)
Save Edits
Cancel