以下2个代码块会实现相同的结果。那么有什么不同呢?
class test {
Object obj = new Object();
void test(){
synchronized(obj){
}
}
void test1(){
synchronized(this){
}
}
}
答案 0 :(得分:7)
obj
引用的对象上的监视器。
通常使用私有变量进行同步更好,不要将变量值暴露给任何其他代码。这意味着您知道您的类中的代码是 only 代码,它将在该对象上进行同步,这使您的代码更易于推理。如果您在任何其他代码也同步的监视器上同步(包括this
引用),那么在考虑线程安全,死锁等时,您需要更多的代码来推理。