【发布时间】:2018-01-19 13:28:19
【问题描述】:
我用这个方法用默认值初始化一个ArrayList:
private ArrayList<Integer> createArrayList(int size, int defaultValue)
{
ArrayList<Integer> arrayList = new ArrayList<>(size);
IntStream.range(0, size ).parallel().forEach(i->{arrayList.add(defaultValue);});
return arrayList;
}
令人惊讶的是,如果我用单元测试检查返回数组的大小,它不是固定数字,而且几乎总是小于请求的大小。
如果我删除parallel(),它的大小总是符合要求的。
为什么会这样?
【问题讨论】:
-
因为 arraylist 不是线程安全的集合,而您正试图在其中同时插入元素。
标签: java parallel-processing thread-safety java-stream