同期を視覚化して理解しようとしています。
- 同期ブロックの静的ロック オブジェクト(コード A)と非静的ロック オブジェクト(コード B)の使用の違いは何ですか?
- 実際のアプリケーションではどのように異なりますか?
- 一方にはあり、他方にはならない落とし穴は何ですか?
- どちらを使用するかを決定する基準は何ですか?
コード A
public class MyClass1 {
private static final Object lock = new Object();
public MyClass1() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
コード B
public class MyClass2 {
private final Object lock = new Object();
public MyClass2() {
//unsync
synchronized(lock) {
//sync
}
//unsync
}
}
ノート
上記のコードはコンストラクターを示していますが、静的メソッドと非静的メソッドでも動作がどのように異なるかについて話すことができます。また、同期ブロックが静的メンバー変数を変更しているときに静的ロックを使用すると有利でしょうか?
私はすでにこの質問の回答を見ましたが、さまざまな使用シナリオが何であるかが十分に明確ではありません.