オブジェクトロックのコンテキストで、これら2つの例の違いを誰かが説明できますか?
public void method1(){
synchronized(this){
....
}
}
と
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
最初の例ではthis
インスタンスのロックを取得し、2番目の例ではaStringBufferObjectインスタンスのロックを取得することを知っています。しかし、私はその効果や2つの違いが何であるかを本当に理解していません。
たとえば、2番目の例では、ロックが「this」インスタンスに関連していないため、スレッドは同期ブロック内でコードを実行できますか?
メソッドまたはコードのブロックを同期すると、複数のスレッドが同時にそのブロック/メソッドにアクセスできなくなることは知っていますが、ロックするオブジェクトを指定する目的と、オブジェクトの指定方法の違いは何ですか?上記の例?