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

时间:2010-09-30 16:09:38

标签: java concurrency synchronization

以下2个代码块会实现相同的结果。那么有什么不同呢?

class test {
 Object obj = new Object();

 void test(){
  synchronized(obj){

  }
 }

 void test1(){
  synchronized(this){

  }
 }
}

1 个答案:

答案 0 :(得分:7)

不,他们不会做同样的事情。其中一个获取“this”上的监视器,另一个获取obj引用的对象上的监视器。

通常使用私有变量进行同步更好,不要将变量值暴露给任何其他代码。这意味着您知道您的类中的代码是 only 代码,它将在该对象上进行同步,这使您的代码更易于推理。如果您在任何其他代码同步的监视器上同步(包括this引用),那么在考虑线程安全,死锁等时,您需要更多的代码来推理。