java8的新特性stream相信大家肯定了解,那大家知道stream也可以支持并行操作吗,没错,他就是今天的主角parallelStream
其实它和stream的操作是大差不差的的,最大的不同就是parallelStream每次的流操作会使用forkjoin线程池来完成,所以大大提高了程序的执行效率
parallelStream的线程安全问题
大家知道了parallelStream的优点下面我来介绍一下它的缺点,既然是并行的,那就要提到线程安全的问题,先来看一段代码
private static List<Integer> list2 = new ArrayList<>();
IntStream.range(0, 10000).parallel().forEach(list2::add);
执行完代码发现实际的参数比预计少了,这其实也很好理解,其实这不是parallelStream本身的问题,而是ArrayList本身线程不安全,就会出现这样的情况,不理解的可以去看我的博客ArrayList线程不安全的原因以及如何解决以及hashmaq线程不安全的解决方法_EntyIU的博客-CSDN博客
parallelStream如何避免出现线程安全问题
1.使用线程安全的集合
2.避免多线程去操作同一个数据
3.使用collect或者reduce操作