问题
I have seen usage of synchronized block by this so far but recently I learned that using dummy object is preferable. I found the following topic related to this.
Java synchronized method lock on object, or method?
As a summary, in the code below, two different object can not run addA and addB concurrently as both uses this for lock.
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
I am confused if I use dummy object for lock, what will be different if I use the line below in both method to synchronize? Because still they would have same lock.
synchronized(dummyObject){
...
}
So what it means that I should have two different dummy object for each method to use with sycnhronized as?
public void addA(){
synchronized(dummyObj1){
a++;
}
}
public void addB(){
synchronized(dummyObj2){
b++;
}
}
回答1:
That is exactly the point of lock objects - you can use different locks for different operations. Assuming it makes sense to run addA
and addB
concurrently (and from the looks of it - it definitely does), you should indeed have two separate locks, one for each method.
回答2:
You are correct. In this case you need two different objects to synchronize on them separately.
For locking purpose the easiest way is to create Object
objects.
Object lock1 = new Object();
Object lock2 = new Object();
来源:https://stackoverflow.com/questions/41506470/synchronizing-by-this-vs-dummy-object