[英]Synchronized block with private immutable object and synchronize method difference
[英]Difference between using synchronized on “this” and a private “new Object”?
下面的两个代码块将达到相同的结果。 那么,有什么区别更好呢?
class test {
Object obj = new Object();
void test(){
synchronized(obj){
}
}
void test1(){
synchronized(this){
}
}
}
不,他们做的不一样。 其中一个获取“ this”上的监视器,而另一个获取obj
引用的对象上的监视器。
通常,最好使用私有变量进行同步,而不要将该变量的值暴露给任何其他代码。 这意味着您知道类中的代码是唯一将在该对象上同步的代码,这使您的代码更易于推理。 如果您在任何其他代码也可以同步的监视器上进行同步(包括this
引用),则在考虑线程安全性,死锁等时,您将需要考虑更多代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.