下面的类线程安全吗?我担心并发读写初始化变量。如果它不是线程安全的,如何使它成为线程安全的?
- 我知道将 methodA 转换为同步会有所帮助,但我不想这样做
- 如何将 volatile 密钥添加到“初始化”变量?
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 添加到 initialized 将使其线程安全,对吗?