为什么Java中需要volatile

时间:2012-12-04 00:45:13

标签: java caching concurrency volatile cpu-cache

在Java中,所有线程都使用相同的堆。如果一个线程正在将操作缓存到堆中,那么它何时会刷新到堆?

我已阅读了很多帖子但未能找到答案。

感谢。

2 个答案:

答案 0 :(得分:1)

volatile告诉Java该变量可能在多个线程中发生变化,因此不会缓存变量。缓存是处理器级别的构造,因此处理器可以随时刷新缓存。

答案 1 :(得分:0)

提供其他示例:有股票网站等网站希望向用户显示最新数据,而不是某些陈旧数据。正确?

他们所做的就是禁用网页缓存,这样网页就不会在任何地方缓存,而且所有网页都会更新最新数据。

类似于volatile的情况,核心或处理器有自己的缓存,并且它们缓存结果,认为当前处理器上运行的线程不会更改变量的值然后为什么要反复阅读记忆。因此它会缓存它并返回缓存值(这是针对硬件级别性能)。

因此,如果您希望停止其他使用陈旧值的处理器的网站示例,您需要停止缓存volatile是这样做的方法Java的。