Java新特性玩转JDK8之并⾏流parallelStream

DBC 1.8K 0
为什么会有这个并⾏流

集合做重复的操作,如果使⽤串⾏执⾏会相当耗时,因此⼀般会采⽤多线程来加快, Java8的
paralleStream⽤fork/join框架提供了并发执⾏能⼒

底层原理

线程池(ForkJoinPool)维护⼀个线程队列
可以分割任务,将⽗任务拆分成⼦任务,完全贴合分治思想

问题

paralleStream并⾏是否⼀定⽐Stream串⾏快?

错误,数据量少的情况,可能串⾏更快,ForkJoin会耗性能
多数情况下并⾏⽐串⾏快,是否可以都⽤并⾏

不⾏,部分情况会有线程安全问题,parallelStream⾥⾯使⽤的外部变量,⽐如集合⼀
定要使⽤线程安全集合,不然就会引发多线程安全问题
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());
 }
list一般不会存储几十万或者几百万对象,因为JVM内存,可能OOM,所以一般都不会很多,推荐使用stream()

发表评论 取消回复
表情 图片 链接 代码

分享