技术编程5万字:Stream和Lambda表达式最佳实践2( 九 )
看下输出结果:INFO com.flydean.InfiniteStreamUsage - [IntegerWrapper(integer=46), IntegerWrapper(integer=42), IntegerWrapper(integer=67), IntegerWrapper(integer=11), IntegerWrapper(integer=14), IntegerWrapper(integer=80), IntegerWrapper(integer=15), IntegerWrapper(integer=19), IntegerWrapper(integer=72), IntegerWrapper(integer=41)]复制代码16. 自定义parallelStream的thread pool
之前我们讲到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表达式的各个小的细节 , 希望大家能够喜欢 。
推荐阅读
- 更名为广东职业技术师范学院天河学院
- 36氪利用无人驾驶技术切入水域智慧环卫与维护,“欧卡智能”获千万元级融资
- 上游新闻|精度达到2-3米,北斗系统发言人:中国北斗攻克160余项关键技术
- IT之家|三星Galaxy Note 20将搭载UWP技术 传文件比NFC更快
- 央视新闻客户端|北斗系统工程新技术应用超过70%
- 问董秘|提供设备和技术的正是克劳...,投资者提问:中石油系统已经大量加入做聚丙烯熔喷料
- 我国|我国封锁“世界唯一专利”,日本出3000亿要买,美国要求技术共享
- 检测|辽宁派16支核酸检测医疗队驰援大连,研发10合1混采技术
- 北斗办:北斗与5G融合将推动无人驾驶等技术发展
- 北斗系统工程新技术应用超过70%