如果我们在多核处理器上工作,我们需要这些核心的缓存是同步的,如果一个任务被划分并分配到不同的核心来处理。Java 8流库是如何实现这一点的?在Java 8流并行处理过程中,所有处理器内核的缓存是否是同步的?
发布于 2015-08-05 16:06:17
这是Java内存模型的保证之一。只要您的程序正确地同步(通过synchronized、Lock或其他形式的同步),您的共享内存对所有线程都是可见的。
不是说缓存将是“同步的”,而是在访问适当同步变量之前重新加载缓存,并在写入适当同步变量时刷新缓存。
JLS §17.4.3
在顺序一致的执行中,对所有单独的操作(例如读和写)都有一个总的顺序,这与程序的顺序是一致的,而且每个单独的操作都是原子的,每个线程都可以立即看到。
JLS §17.3
需要注意的是,
Thread.sleep和Thread.yield都没有任何同步语义。特别是,编译器不必在调用Thread.sleep或Thread.yield之前将缓存在寄存器中的写操作刷新到共享内存,编译器也不必在调用Thread.sleep或Thread.yield之后重新加载缓存在寄存器中的值。
https://stackoverflow.com/questions/31828124
复制相似问题