半夜上线,发现一个查询返回一会是3,一会是4,很诡异,经过一顿排查,发现是parallelStream 和ArrayList的问题 直接上测试代码 @Test public void testParallelStream() { for (int i = 0; i < 100; i++) { List<String> list1 = new ArrayList<>(); List<String> list2 = new ArrayList<>(); list1.add("a"); list1.add("b"); list1.add("c"); list1.add("d"); list1.parallelStream().forEach(list->list2.add(list)); System.out.println(list2.size()); } }
循环100次,会出现3,分析原因:ArrayList是线程不安全的,在并行流时,会出现并发问题。所以项目中不要动不动就用ArrayList,在高并发的情况下可能会有问题