stream():串行处理集合中的元素,如果数据量过多,会比较耗时
parallelStream():paralleStream⽤fork/join框架提供了并发执⾏能⼒
parallerStream()的原理:线程池(ForkJoinPool)维护⼀个线程队列,可以分割任务,将⽗任务拆分成⼦任务,采用了分而治之的思想。
public class Main {public static void main(String[] args) throws Exception {List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);numbers.stream().forEach(System.out::println); //顺序输出numbers.parallelStream().forEach(System.out::println); //乱序输出for(int i=0;i<10;i++){//List list = new ArrayList(); 会抛出异常List list = new CopyOnWriteArrayList(); //线程安全IntStream.range(0,100).parallel().forEach(list::add);System.out.println(list.size());}}}
面试题
paralleStream并⾏是否⼀定⽐Stream串⾏快?
答案:错误,数据量少的情况,可能串⾏更快,因为Fork/Join创建线程的时候会耗性能
多数情况下并⾏⽐串⾏快,是否可以都⽤并⾏流parallelStream()?
答案:不⾏,部分情况会有线程安全问题,parallelStream⾥⾯使⽤的外部变量,⽐如集合⼀定要使⽤线程安全集合,不然就会引发 多线程安全问题
总结:通常我们在java编程的过程中,一个集合是不会存放成千上万个元素的,因为可能存在JVM内存溢出的问题。因此在绝大多数情况 下,我们会选择用stream()串行流处理。
文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




