最終的なプライベートオブジェクトで同期が推奨されることはよく知られています(データメンバー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];
より良いアプローチはありますか?または解決策?