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

akp*_*akp 1 java concurrency synchronization

将跟随2个代码块实现相同的结果.那么有什么不同呢?

class test {
 Object obj = new Object();

 void test(){
  synchronized(obj){

  }
 }

 void test1(){
  synchronized(this){

  }
 }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

不,他们不做同样的事情.其中一个获取"this"上的监视器,另一个获取被引用的对象上的监视器obj.

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