1

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

我已经阅读了很多帖子,但无法找到答案。

谢谢。

4

2 回答 2

1

volatile告诉Java变量可能在多个线程中改变,所以不要缓存变量。缓存是处理器级别的结构,因此处理器可以随时刷新缓存。

于 2012-12-04T00:50:17.350 回答
0

举另一个例子:有像股票网站这样的网站,它们希望向用户显示最新数据,而不是一些陈旧的数据。正确的?

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

类似的情况是volatile,内核或处理器有自己的缓存,他们缓存结果,认为当前处理器上运行的线程不会改变变量的值,那么为什么要一次又一次地从内存中读取。所以它缓存它并返回缓存的值(这是为了硬件级别的性能)。

因此,如果像网站示例一样,您想停止使用陈旧值的其他处理器,您需要停止缓存volatile这是在 Java 中执行此操作的方法。

于 2012-12-05T06:46:25.180 回答