Java同步块对象与此

时间:2018-06-20 14:33:38

标签: java syntax synchronization synchronized

doThis方法中两个同步块之间的差异:

什么时候应该使用?

public class AClass {

private final Object lock = new Object();

public void doThis(){
    synchronized(lock){
        //do stuff
    }
}

}

public class BClass {

public void doThis(){
    synchronized(this){
        //do stuff
    }
}

}

什么时候应该使用另一个?

2 个答案:

答案 0 :(得分:0)

始终使用第一个。

如果您执行synchronized (this),则说明您正在与任何其他代码也具有同步能力的对象进行同步,从而无意中破坏了类的功能。

如果您在私有对象上进行同步,则除了您类中的代码外,绝对没有人可以在其上进行同步。没有人有权干扰您的功能。

答案 1 :(得分:0)

使用锁对象而不是 this 的原因仅仅是为了给自己提供灵活性并避免死锁。请注意,这两个原因仅在不同方法需要同步而不相互冲突时才起作用。这样,提供两个锁定对象就很有意义。在大多数情况下,只需使用 this 即可。