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
// ...
}
}
}
上記のように、組み込みロックを使用するのではなく、外部ロックを使用してクラスをスレッドセーフにすることをお勧めしますか? ここで私の理解が間違っている場合は修正してください。