代码之家  ›  专栏  ›  技术社区  ›  JavaKaKida

单核cpu java中的易失性

  •  2
  • JavaKaKida  · 技术社区  · 6 年前

    (在单CPU的情况下)为了理解volatile-我知道volatile强制线程使用主内存,并且不会将副本保留在其本地内存中。

    在一篇StackOverFlow文章中,我看到java线程使用CPU缓存,而使用volatile则会强制使用主存

    Thread Caching and Java Memory model .

    如果是这种情况,那么就不应该存在内存可见性问题,因为一个线程可以看到其他线程写入的值(假设在单核CPU上,我们将有单缓存)。那么volatile对单CPU有用吗?

    1 回复  |  直到 6 年前
        1
  •  6
  •   David Schwartz    6 年前

    首先,volatile不会强制线程使用主内存。它迫使线程的行为就像它们被迫使用主内存一样。这一点很重要,因为在现代系统中,实际使用主内存会使事情变得缓慢。幸运的是,这绝对不会发生。

    其次,CPU实际有多少核并不重要。单核CPU可以完美地模拟双核CPU,如果愿意,JVM实现可以自由地这样做。进行某种形式的同步是一种Java语言要求,与硬件无关——Java的一个要点是,您不必担心这一点。