Javaマルチスレッドでの「プライベート最終オブジェクト」ロックの使用は何ですか?
私の理解によると、クラスをスレッドセーフにするためには、すべてのメソッドを同期済みとしてマークする組み込みロックを使用し、「this」を使用してオブジェクトのモニターでロックする必要があると思いますか? または、クラスの「this」で同期されているとマークされているメソッドを、メソッド内のプライベート最終オブジェクト ロックに置き換えて、汎用オブジェクト ロックをロックして、スレッド セーフにすることができますか?
組み込みロックを使用するコードの例:
public class Counter{
 // Locks on the object's monitor
 public synchronized void changeValue() { 
   // ...
 }
}
上記のコードを次の外部ロックに置き換えることができます。
public class Counter{
 private final Object lock = new Object(); // private final lock object
  public void changeValue() {
   synchronized (lock) { // Locks on the private Object
  // ...
       }
  }
}
上記のように、組み込みロックを使用するのではなく、外部ロックを使用してクラスをスレッドセーフにすることをお勧めしますか? ここで私の理解が間違っている場合は修正してください。