synchronizing by this vs dummy object

穿精又带淫゛_ 提交于 2019-12-04 05:14:46

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!