在Java 8 Stream并行处理期间,是否同步了所有处理器核心的缓存?

时间:2015-08-05 09:10:26

标签: java parallel-processing synchronization java-8 java-stream

如果我们正在开发多核处理器,我们需要将这些核心的缓存同步,如果任务被划分并分发到不同的核心来处理。 Java 8 Stream库如何实现这一目标?在Java 8 Stream并行处理期间,是否同步了所有处理器核心的缓存?

1 个答案:

答案 0 :(得分:1)

这是Java Memory Model的保证之一。只要您的程序正确同步(通过synchronizedLock或其他形式的同步),您的共享内存将对所有线程可见。

并不是说缓存会同步,#34;但是在访问正确同步的变量之前会重新加载它们,并在写入正确同步的变量时刷新它们。

JLS §17.4.3

  

在顺序一致的执行中,存在总订单   在所有个别动作(例如读取和写入)中   符合程序的顺序和每个单独的动作   是原子的,每个线程都可以立即看到。

JLS §17.3

  

重要的是要注意Thread.sleepThread.yield都不是   有任何同步语义。特别是编译器   不必将寄存器中缓存的写入刷新到共享内存   在调用Thread.sleepThread.yield之前,编译器也没有   调用Thread.sleep后必须重新加载缓存在寄存器中的值   或Thread.yield