package com.spse.pricing.client.main;
import java.util.stream.IntStream;
public class NestedParalleStream {
int total = 0;
public static void main(String[] args) {
NestedParalleStream nestedParalleStream = new NestedParalleStream();
nestedParalleStream.test();
}
void test(){
try{
IntStream stream1 = IntStream.range(0, 2);
stream1.parallel().forEach(a ->{
IntStream stream2 = IntStream.range(0, 2);
stream2.parallel().forEach(b ->{
IntStream stream3 = IntStream.range(0, 2);
stream3.parallel().forEach(c ->{
//2 * 2 * 2 = 8;
total ++;
});
});
});
//It should display 8
System.out.println(total);
}catch(Exception e){
e.printStackTrace();
}
}
}
请帮助我们如何自定义parallestream以确保我们能够获得一致性结果。Java 8嵌套ParallelStream不能正常工作
它实际显示的是什么? – 2014-09-02 14:58:11
'它应该显示8'好,它显示什么呢?您是否尝试过使用'total' ['volatile'](http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html)? – kajacx 2014-09-02 14:58:12
@kajacx volatile不会帮助,因为'a ++'是'a = a + 1'的快捷键,这不是原子的 – talex 2014-09-02 15:01:02