Array|5万字:Stream和Lambda表达式最佳实践2( 九 )
之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的 , 默认情况下ForkJoinPool为每一个处理器创建一个线程 , parallelStream如果没有特别指明的情况下 , 都会使用这个共享线程池来提交任务 。
那么在特定的情况下 , 我们想使用自定义的ForkJoinPool该怎么处理呢?16.1 通常操作
假如我们想做一个从1到1000的加法 , 我们可以用并行stream这样做:List
integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());ForkJoinPool customThreadPool = new ForkJoinPool(4);Integer total= integerList.parallelStream().reduce(0, Integer::sum);log.info("{}",total);复制代码
输出结果:INFO com.flydean.CustThreadPool - 499500复制代码16.2 使用自定义ForkJoinPool
上面的例子使用的共享的thread pool 。我们看下怎么使用自定义的thread pool来提交并行stream:List
integerList= IntStream.range(1,1000).boxed().collect(Collectors.toList());ForkJoinPool customThreadPool = new ForkJoinPool(4);Integer actualTotal = customThreadPool.submit(() -> integerList.parallelStream().reduce(0, Integer::sum)).get();log.info("{}",actualTotal);复制代码
上面的例子中 , 我们定义了一个4个线程的ForkJoinPool , 并使用它来提交了这个parallelStream 。
输出结果:INFO com.flydean.CustThreadPool - 499500复制代码
如果不想使用公共的线程池 , 则可以使用自定义的ForkJoinPool来提交 。17. 总结
本文统一介绍了Stream和lambda表达式的使用 , 涵盖了Stream和lambda表达式的各个小的细节 , 希望大家能够喜欢 。
推荐阅读
- Array|臭氧层正在愈合,并对大气环流造成重大影响
- Array|瞄准“宅经济”!VR看房成年轻人租房新趋势
- Array|Spanlite公司使用3D打印一次高速烧结8,000个零件
- Array|面面俱到的绝佳体验 优质国产旗舰手机推荐
- Array|消息称爱奇艺或在港二次上市,回应称不予置评
- Array|中国移动首次招标边缘计算服务器 浪潮NE5260M5成功中标
- Array|远程课程“育见”VR 联想带来550个STEM教育模块
- Array|宁德时代拟190亿元展开产业链投资,提升公司市场竞争力
- Array|SA:2020年Q2全球智能音箱销量达3000万台,环比增长6%
- Array|GE超滤膜的材质特点
