基本的java同步

Pra*_*ngh -1 java synchronization

我有一个问题,有什么区别

StringBuilder sb = new StringBuilder();
public void sync(){
  synchronized(sb){
  };
}
Run Code Online (Sandbox Code Playgroud)

public void sync(){
  synchronized(this){
  };
}
Run Code Online (Sandbox Code Playgroud)

Mr.*_*art 7

在第一种情况下,您锁定"sb"变量,在第二种情况下,锁定"this"对象.这很明显,但我想你想知道哪个更好.

好吧,第一种情况更好,因为你锁定了一个局部变量(考虑将其设为私有)并且你很确定没有其他人会锁定它而不是你.如果您锁定"this",任何其他线程都可以使用此对象锁定,从而阻止您运行同步代码(而您可以安全地运行).