どうやって
私はこのクラスを持っているとしましょう
@ImmutableWannabe
public class ConfigurationHolder {
@ImmutableButHowToMakeSureNoTwoThreadsOverrideOneEachOtherWhenReplacingReference
private Map<System, Configuration> mySysConfig = ImmutableMap.builder<>getSomeConfigurations....build();
ConfigurationHolder(copy constructor) {
mySysConfig = ImmutableMap.builder().of(inputSysConfig);
}
}
ここで、システム構成の 1 つが更新され、このマップを更新する必要があるとしましょう。ただし、スレッド セーフな方法で更新する必要があります。つまり、2 つのスレッドが同じシステム データの同じ構成を更新しようとする場合、一貫性が保たれ、互いにオーバーライドされないようにする必要があります。
不変性はここでどのように役立ちましたか? 私が見る限り、ロックを行う必要がある場合は、適切に行う方法を教えてください。
したがって、私の一般的な質問は次のとおりです。システム時間の経過とともに変化する可能性のある immutableObject により、その ImmutableObjectHolder を変更する必要があるコードをロックする必要があるのではないでしょうか? 理解できません...
ImmutableMap +そのマップのホルダー+内部マップの更新でこのImmutableMapHolderを更新することを知っている適切な「クライアント」コードの適切な例を誰かが教えてください。
ありがとう