【发布时间】:2013-05-23 01:37:08
【问题描述】:
据我了解,新的 java 内存模型要求对 volatile 变量的访问不会随着对其他变量的访问而重新排序,因此遵循 code 是正确的:
Map configOptions;
char[] configText;
volatile boolean initialized = false;
// In Thread A
configOptions = new HashMap();
configText = readConfigFile(fileName);
processConfigOptions(configText, configOptions);
initialized = true;
// In Thread B
while (!initialized)
sleep();
// use configOptions
所以当initialized 设置为true 时,配置选项已经初始化,但它是否可见?我的意思是它已经在主内存中了吗?
【问题讨论】:
-
即使它会起作用,使
configOptions的可见性依赖于另一个变量的可见性是非常脆弱的。您应该尽可能避免:a) 顺序语义(“X 是有效的,因为它发生在 Y 之前”)和 b) 耦合。
标签: java concurrency volatile