gpt4 book ai didi

java - 具有 volatile 写入的本地内存可见性

转载 作者:行者123 更新时间:2023-11-30 06:24:31 29 4
gpt4 key购买 nike

据我了解,新的 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 时,配置选项已经初始化,但它是否可见?我的意思是它已经在主内存中了吗?

最佳答案

是的。从 Java 5 开始,访问 volatile 变量会创建内存屏障,从而有效地同步所有缓存变量的副本与主内存。

这被称为同步搭载,其中对非同步变量的写入使用对其他一些变量的后续同步来使用主内存更新其值。

此外,在 volatile 上读/写是昂贵的。不建议使用它来摆脱无限循环。如果这是不可避免的,至少在某处使用 Thread.sleep()

引用资料:
Volatile piggyback. Is this enough for visiblity?

关于java - 具有 volatile 写入的本地内存可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16786004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com