1 回答
TA贡献2065条经验 获得超14个赞
ArrayList是不是线程安全的集合,并尝试从多个线程更新它parallelStream,你看到的是结果resizing的,内部阵列ArrayList-该操作不是线程安全的要么,你先增加数组并再移动元素它:可能是元素尚未移动而您尝试访问它。
为了使它更加明确,调整大小时发生一个新的阵列与增大的尺寸创建-如果充满了这种新的阵列null小号只复制发生之后。
真的无法预测会发生什么,只是不要依赖任何这些。
编辑
我不能将此作为评论发布,但这里有一些代码证明null可以看到:
List<Integer> result = IntStream.iterate(0, i -> i + 1)
.takeWhile(i -> {
String arr[] = { "A", "B", "C", "D", "E", "F", "G", "H", "R", "T" };
List<String> list = new ArrayList<>();
Arrays.stream(arr)
.parallel()
.peek(list::add)
.forEach(x -> {
});
if (list.contains(null)) {
System.out.println("It took " + i + " steps to see a null");
return false;
}
return true;
})
.boxed()
.collect(Collectors.toList());
添加回答
举报