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
}
}
}
什么时候应该使用另一个?
答案 0 :(得分:0)
始终使用第一个。
如果您执行synchronized (this)
,则说明您正在与任何其他代码也具有同步能力的对象进行同步,从而无意中破坏了类的功能。
如果您在私有对象上进行同步,则除了您类中的代码外,绝对没有人可以在其上进行同步。没有人有权干扰您的功能。
答案 1 :(得分:0)
使用锁对象而不是 this 的原因仅仅是为了给自己提供灵活性并避免死锁。请注意,这两个原因仅在不同方法需要同步而不相互冲突时才起作用。这样,提供两个锁定对象就很有意义。在大多数情况下,只需使用 this 即可。