I have a test code like this :
List<Integer> list = new ArrayList<>(1000000);
for(int i=0;i<1000000;i++){
list.add(i);
}
List<String> values = new ArrayList<>(1000000);
list.stream().forEach(
i->values.add(new Date().toString())
);
System.out.println(values.size());
运行该代码,得到正确输出:1000000。
然而,如果我将 stream()
改成 parallelStream()
, 如下所示:
list.parallelStream().forEach(
i->values.add(new Date().toString())
);
我得到了一个随机输出,例如:920821。
这是怎么回事?
ArrayList
上的add
操作不具备线程安全性! - SMA