繁体   English   中英

在“ this”和私有“ new Object”上使用同步之间的区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM