自定义parallelStream的thread pool

简介: 自定义parallelStream的thread pool

目录



自定义parallelStream的thread pool


简介


之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的,默认情况下ForkJoinPool为每一个处理器创建一个线程,parallelStream如果没有特别指明的情况下,都会使用这个共享线程池来提交任务。


那么在特定的情况下,我们想使用自定义的ForkJoinPool该怎么处理呢?


通常操作


假如我们想做一个从1到1000的加法,我们可以用并行stream这样做:


List<Integer> 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


使用自定义ForkJoinPool


上面的例子使用的共享的thread pool。 我们看下怎么使用自定义的thread pool来提交并行stream:


List<Integer> 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来提交。


本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/stream-cust-threadpool

相关文章
|
前端开发 架构师 搜索推荐
COLA 4.0:直击应用架构本质的最佳实践
COLA 4.0:直击应用架构本质的最佳实践
4365 1
COLA 4.0:直击应用架构本质的最佳实践
|
消息中间件 资源调度 数据可视化
企业级分布式批处理方案
在企业级大数据量批处理需求场景中,如何通过分布式方式来有效地提升处理效率。本文将就常见批处理框架Spring Batch与SchdulerX进行比较讨论。同时基于阿里巴巴分布式任务调度平台SchedulerX2.0,实现一个分布式并行批处理方案,展示其相关的功能特性。
3379 0
|
Linux iOS开发 Docker
|
人工智能 运维 测试技术
工作上个的好搭子——通义灵码测评分享
作为一名运维开发工程师,我使用通义灵码的@workspace和@terminal功能,快速熟悉新项目代码并实现新需求。相比之前,提效了约50%。本文分享了我的使用体验和心得,详细介绍了通义灵码如何帮助我在复杂项目中提高开发效率、降低学习成本、提升代码质量和增强团队协作。
支付宝提现方案
说明   首先使用支付宝接口实现提现功能,需要使用到【单笔转账到支付宝账户接口】   大家需要转变一个思路,单笔转账接口可以转账给个人支付宝账户,对于用户而言收到商家转账就是提现成功。所以我们可以针对这个接口来说,转账就是提现。
2237 12
|
Java Apache 微服务
OpenFeign
OpenFeign
383 2
|
缓存 监控 Java
解决 Groovy 引起的一次 OOM 告警
线上OOM告警了,一个简单的case演示如何分析和解决。
439 2
|
NoSQL Java Redis
[已解决]报异常java.io.InvalidClassException的解决方法|对象序列化实现Serializable会出现java.io.InvalidClassException的异常
[已解决]报异常java.io.InvalidClassException的解决方法|对象序列化实现Serializable会出现java.io.InvalidClassException的异常
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
1330 1