【发布时间】:2017-10-16 05:58:48
【问题描述】:
我想计算 a^b ,例如2^30,
public long pow(final int a, final int b)
我首先使用这种方式
return LongStream.range(0, b).reduce(1, (acc, x) -> a * acc); // 1073741824
得到了正确的结果。然后我想并行计算,自然就改成了
return LongStream.range(0, b).parallel().reduce(1, (acc, x) -> a * acc); // 32
但在这种情况下,结果只是32。为什么?
所以为了支持并行我又改了
return Collections.nCopies(b,a).parallelStream().reduce(1, (acc, x) -> acc * x); // 1073741824
在这种情况下它可以工作。
那么parallel的方式有什么问题呢?
【问题讨论】:
标签: java parallel-processing java-8 java-stream reduce