我将实例变量声明为 voltile。假设多核下的两个处理器创建两个线程,其中线程更新变量。确保 瞬时可见性,我相信在这里将变量声明为 volatile 是正确的选择,以便线程完成的更新发生在主内存中并且对另一个线程可见。 对吗?
这里的目的是理解多核处理器方面的概念。
最佳答案
我假设您正在考虑使用 volatile
与不使用任何特殊的并发规定(例如synchronized
或AtomicReference
)。
无论您运行的是单代码还是多核,都无关紧要:如果没有 volatile
,线程之间共享数据绝不是安全的。没有它,运行时还可以做更多的事情;基本上它可以假装访问线程是 JVM 上运行的唯一线程。线程可以读取该值一次并将其永久存储在调用堆栈中;读取该值但从不写入该值的循环可以进行转换,以便该值在开始时仅读取一次并且不再重新考虑,依此类推。
所以消息很简单:使用 volatile
- 但这不一定是您在并发代码中需要处理的全部。
关于java - Volatile 变量在这里有意义吗(多核处理器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26756954/