次のクラススレッドは安全ですか?初期化された変数の読み取りと書き込みの同時実行について心配しています。スレッドセーフでない場合、スレッドセーフにする方法は?
- methodAを同期に変換すると役立つことはわかっていますが、これはしたくありません
- 「初期化された」変数に揮発性キーワークを追加するのはどうですか?
public class A {
private boolean initialized;
public synchronized void init(String configFilePath) {
if (initialized) {
return;
}
initialized = true;
}
public void methodA() {
if (!initialized) {
throw new ConfigurationException()
}
}
}
Update1:初期化された変数はinitメソッドで一度だけ変更され、他のすべてのメソッドは準備ができているだけです。その場合、初期化されたものにvolatileを追加すると、スレッドセーフになりますが、それは正しいですか?