-2

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

}

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

4

2 回答 2

0

使用锁对象而不是this的原因只是为了给自己灵活性并避免死锁。请注意,这两个原因只有在不同的方法需要同步时才会发挥作用,而不是相互冲突。提供两个锁对象是有意义的。大多数时候,只要使用它就可以

于 2018-06-20T15:01:11.860 回答
0

始终使用第一个。

如果你这样做synchronized (this),你正在同步一个任何其他代码也有能力同步的对象,因此不知不觉地弄乱了你的类的功能。

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

于 2018-06-20T14:41:00.053 回答