Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单核cpu java中的易失性_Java_Multithreading_Caching_Volatile - Fatal编程技术网

单核cpu java中的易失性

单核cpu java中的易失性,java,multithreading,caching,volatile,Java,Multithreading,Caching,Volatile,对于理解volatile的单个CPU,我知道volatile强制线程使用主内存,并且不会将副本保留在其本地内存中 在一篇StackOverFlow文章中,我看到java线程使用CPU缓存,而使用volatile则会强制使用主内存 如果是这种情况,那么就不应该存在内存可见性问题,因为一个线程可以看到另一个线程编写的值,假设在单核CPU上我们将有单缓存。所以volatile对单CPU有用吗?首先,volatile不会强制线程使用主内存。它强制线程的行为就像它们被迫使用主内存一样。这一点很重要,因为

对于理解volatile的单个CPU,我知道volatile强制线程使用主内存,并且不会将副本保留在其本地内存中

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


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

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


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

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


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

我的内存可视化是否正确?线程将在哪里使用CPU缓存来缓存值?@sachinyewale我不确定我确切了解什么你在问。但是是的,CPU的缓存将用于线程通信。事实上,加速此过程是现代Intel CPU上三级缓存的主要目的之一。如果线程将使用相同的CPU缓存,则从概念上讲,如果一个线程在给定缓存中写入某个变量,则随后另一个线程可以读取该值而无需使用valatile,因为它是相同的缓存,如果我错了,请纠正。@sachinyewale当然,那是可能发生的。有时你可以打破规则,但它仍然碰巧起作用。。。如果多个线程可以使用同一个缓存,那么我们是否需要volatile来解决单核机器中的缓存问题?我知道我们应该这样做,但我只是想了解我的内存可视化是否正确?线程将在哪里使用CPU缓存来缓存值?@sachinyewale我不确定我是否完全理解您的要求。但是是的,CPU的缓存将用于线程通信。事实上,加速此过程是现代Intel CPU上三级缓存的主要目的之一。如果线程将使用相同的CPU缓存,则从概念上讲,如果一个线程在给定缓存中写入某个变量,则随后另一个线程可以读取该值而无需使用valatile,因为它是相同的缓存,如果我错了,请纠正。@sachinyewale当然,那是可能发生的。有时你可以打破规则,但它仍然碰巧起作用。。。如果多个线程可以使用同一个缓存,那么我们是否需要volatile来解决单核机器中的缓存问题?我知道我们应该这么做,但我只是想了解潜在的原因