最終的なプライベートオブジェクトで同期が推奨されることはよく知られています(データメンバーthisでの同期と比較して)。protected
しかし、アプリケーションに共通のオブジェクトで同期する必要のある複数のクラス(モジュール)がある場合はどうなりますか?
これら2つの一見矛盾する要件を調整する方法はありますか?
説明をわかりやすくするために、クラスのプライベートデータメンバーが次のようにOwner定義されている場合:
private final Object $01pfo = new Object[0];
次に、の任意のメソッドでOwner簡単に使用できます。
protected void anyMethod() {
synchronized ($01pfo) {
// do your thing
}
}
$01pfoしかし、別のクラス(たとえば)から同期したい場合、保護または公開Userする唯一のオプションはありますか?$01pfo
protected final Object $01pfo = new Object[0];
より良いアプローチはありますか?または解決策?