我发现我有点挣扎于并行流提供的一致性保证:
1. myList.parallelStream().map(mymapper).forEach(myFn)
2. // Is myFn guaranteed to be called for each element in myList here ?换句话说,我是否可以确保执行myFn的所有myFn都在第2行完成?
发布于 2014-09-15 08:21:30
是。在一个完整的流管道内的并行任务被同步执行。第2行只有在所有任务完成后才能执行。
用于java.util.stream的包文档说,
在几乎所有的情况下,终端操作都是急切的,在返回之前完成对数据源的遍历和对管道的处理。
但是,请注意,forEach任务完成的任何副作用对其他线程都可能是不可见的。在实践中,forEach只能通过其动作执行副作用来操作。正如在javadoc中提到的,操作必须使用适当的同步或其他构造,以确保线程安全操作和副作用的适当可见性。
https://stackoverflow.com/questions/25843346
复制相似问题