【发布时间】:2015-03-02 20:10:07
【问题描述】:
目前我正在阅读Java 8 Lambdas: Pragmatic Functional Programming(非常有趣且写得很好的书,没有推荐)。
在第 6 章之后有一个练习:
代码将列表中的每个数字相乘,然后将 结果由 5. 顺序运行正常,但并行运行时有bug。
public static int multiplyThrough(List<Integer> linkedListOfNumbers) {
return linkedListOfNumbers.parallelStream()
.reduce(5, (acc, x) -> x * acc);
}
以及解决方案:
public static int multiplyThrough(List<Integer> numbers) {
return 5 * numbers.parallelStream()
.reduce(1, (acc, x) -> x * acc);
}
我不明白为什么第一种方法在并行模式下是错误的,并且书中没有解释。
请解释一下。
【问题讨论】:
-
@ZouZou 是的,刚刚意识到这与您指出的问题很接近。谢谢。
标签: java lambda parallel-processing java-8 java-stream