是parallelStream终止定义好吗?

时间:2014-09-15 08:04:28

标签: java java-8

我发现我对并行流提供的一致性保证略有争议:

1. myList.parallelStream().map(mymapper).forEach(myFn)
2. // Is myFn guaranteed to be called for each element in myList here ?

换句话说,我可以确定将执行myFn的所有forkJoinTasks在第2行完成吗?

1 个答案:

答案 0 :(得分:3)

是。完整流管道中的并行任务同步执行。只有在完成所有任务后才会执行第2行。

package documentation for java.util.stream州,

  

在几乎所有情况下,终端操作都很渴望,在返回之前完成数据源的遍历和管道的处理。

但请注意,forEach任务完成的任何副作用可能不会对其他线程可见。在实践中,forEach只能通过使其动作执行副作用来操作。如Stream.forEach javadoc中所述,操作必须使用正确的同步或其他构造,以确保线程安全操作和副作用的正确可见性。