質問: str; } public String getS(){ return s; } } ``` 複数のスレッドがこの値を読み取るためにこの変数を叩くことになります。それを揮発性と宣言してパフォーマンス低下を招くことなく、安全にする最良の方法は何ですか? 私は現在、ReadWriteLockの方向に向かっていますが、私が理解する限り、ReadWriteのロックはスレッドのキャッシュから安全になりませんか?シンクロナイゼーションが起こらない限り?つまり、 `volatile` キーワードを使用するだけでよいのですか? 私の理解は正しいのですか?他のスレッドにメインメモリ内の変数の更新について手動で通知して、満月に一度だけローカルキャッシュを更新できるものはありますか? `volatile` on this seems overkill given that the server application is designed to run for months without restart. By that time, it would've served a few million reads. I'm thinking I might as well just set the String as static final and not allow it mutate without a complete application and JVM restart.
回答: `volatile` キーワードを避けるためには、 `Test` クラスに memory barrier "メソッドを追加することができます。例 ``` public synchronized void sync() { } ``` これにより、スレッドはメインメモリからフィールド値を再読み込みさせます。 また、セッターを変更する必要があります ``` public synchronized void setS(String str){ s = str; } ``` `synchronized` キーワードは、設定スレッドがメインメモリに直接書き込むようにします。 同期とメモリの障壁の詳細については、こちらを参照してください。