synchronizing by this vs dummy object

2019-03-02 14:40发布

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++;
    }
}

2条回答
做个烂人
2楼-- · 2019-03-02 15:16

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();
查看更多
我命由我不由天
3楼-- · 2019-03-02 15:20

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.

查看更多
登录 后发表回答