public class ParallelStreamTest {
public static void test() {
List<Integer> listOfIntegers =
new ArrayList<>();
for (int i = 0; i < 10000; i++) {
listOfIntegers.add(i);
}
// 并发向List添加元素
List<User> parallelStorage = new ArrayList<>();
listOfIntegers
.parallelStream()
.forEach(i -> {
System.out.println(listOfIntegers.size());
System.out.println(i);
User user = new User();
parallelStorage.add(user);
});
parallelStorage.forEach(o -> {
System.out.println(o.getUsername());
});
}
public static void main(String[] args) {
test();
}
}
问题一:

本文探讨了在并发环境下使用ArrayList添加元素可能导致的`null`异常和数组下标越界异常的原因,分析了并发修改ArrayList时容量扩容的 race condition 问题。为了解决这些问题,提供了一个使用并行流(ParallelStream)过滤和映射操作的例子,通过收集到新的列表来避免并发修改,从而确保线程安全。最后展示了调整后的代码,实现了安全的并发添加元素并打印User对象的username。

5561

被折叠的 条评论
为什么被折叠?



