parallelStream默认使用了fork-join框架,其默认线程数是CPU核心数。

通过查阅资料,发现有两种方法来修改默认的多线程数量:

1.全局设置

在运行代码之前,加入如下代码:

System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "64");

一般不建议修改,因为修改虽然改进当前的业务逻辑,但对于整个项目中其它地方只是用来做非耗时的并行流运算,性能就不友好了,因为所有使用并行流parallerStream的地方都是使用同一个Fork-Join线程池,而Fork-Join线程数默认仅为cpu的核心数。最好是自己创建一个Fork-Join线程池来用,即下面的方法2。

2.引入Fork-Join Pool

IntStream range = IntStream.range(1, 100000);

// 传入parallelism

new ForkJoinPool(parallelism).submit(() -> range.parallel().forEach(System.out::println)).get();

因为我们创建自己的线程池,可以避免共享线程池,如果有需要,甚至可以分配比处理机数量更多的线程。

最后列举一些使用parallelStream需要注意的地方:

1.parallelStream线程不安全问题(加锁、使用线程安全的集合或者集合采用collect()或reduce()操作就是满足线程安全的;

2.parallelStream 适用的场景是CPU密集型的,假如本身电脑CPU的负载很大,那还到处用并行流,那并不能起到作用,切记不要再paralelSreram操作是中使用IO流;

3.不要在多线程中使用parallelStream,原因同上类似,大家都抢着CPU是没有提升效果,反而还会加大线程切换开销;

本文地址:https://blog.csdn.net/lgq2016/article/details/107159256

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

java 最大线程数 设定_Java8 parallelStream 修改默认的线程数量相关推荐

  1. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池

    调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能.在实际工作中,我们需要根据任务类型的不同选择对应的策略. CPU 密集型任务 首先,我们 ...

  2. java虚拟机线程数_Java虚拟机最多支持多少个线程?

    作者:miracle1919  来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商 ...

  3. 【线程池的工作参数、什么情况下会触发最大线程数?什么情况下会回收线程?】

    线程池是一个重要的 Java 并发编程工具,用于控制线程的创建.调度和回收,可以有效地提高程序的性能和资源利用率. 线程池的工作参数包括以下几个方面: 核心线程数(corePoolSize): 表示线 ...

  4. java统计系统线程数_Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  5. linux 修改最大线程,Linux ulimit跟动态修改MySQL最大线程数限制

    Linux ulimit和动态修改MySQL最大线程数限制 ulimit是限制进程对资源的使用,根据摩尔定律,高配的硬件现下也差不多白菜价 但软件资源限制变化不大,特别是process/file,分别 ...

  6. java线程池最大线程数_Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  7. mfc怎么获取进程的线程数_2020年大厂喜欢这样问线程安全,这些知识点我整理好了

    2020年,截止目前,我收到了阿里巴巴.腾讯.美团.京东.快手等互联网大厂的面试邀请.求职是一场流程很长的拉锯战,涉及岗位选择.简历投递.简历评估.技术面试.HR面试等环节. 我发现在技术面试中多线程 ...

  8. Java实现用户头像上传(修改默认文件大小限制)

    概述 每次说起文件上传,就不得不提一下前端的实现方式,说来也奇怪,本博主最热门的博客居然也是文件上传,3万多的访问量占了总访问量的一多半:<传统form表单提交方式的文件上传与文件存储>, ...

  9. 【Java面试小短文】当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?

    欢迎关注Java面试系列,不定期更新面试小短文.欢迎一键三连! 当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务? 当我们提交一个任务到线程池,它的工作原理如下: ...

最新文章

  1. html如何让边框变圆,CSS怎样做出自适应圆形边框?
  2. 为什么将老年代移动到方法区
  3. 关于代码手写UI,xib和StoryBoard
  4. PHP导航猫导航系统源码
  5. MAC OS上将项目提交到github
  6. 待支付取件费用是什么意思_SEDEX验厂是什么意思,sedex验厂审核费用是多少?...
  7. SAP License:SAP IDES 4.71的安装补充
  8. 记录——《C Primer Plus (第五版)》第十一章编程练习第二题
  9. 拓端tecdat|r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
  10. 噪声和振动分析软件,它代表了统计能量分析(SEA)领域的最高水平AutoSEA2 V2.8
  11. python爬淘宝评论源代码_python3爬取淘宝信息代码分析
  12. 宏基因组 微生物组 微生物生态领域杂志简介及最新影响因子
  13. c语言课程实验总结报告,c语言实验总结报告.doc
  14. python导入wx_Python“导入wx”
  15. 最新PHP编程零基础入门项目实战教程(完整)
  16. Vue2.0基本用法之组件的注册和传值(父子props,插槽,$emit)和学写购物车
  17. 电脑启用网络发现以后在点开又成关闭状态了,导致网上邻居访问不了 。如何处理
  18. 【第三章】 C语言之牛客网刷题笔记 【点进来保证让知识充实你一整天】
  19. 查看服务器文件夹内存,查看服务器各文件夹内存占用
  20. 我的读书笔记——不上班也有钱

热门文章

  1. 【期末】202I-2022 IT项目管理期末考试(广州大学)
  2. 【安卓】基于SharedPreferences实现用户登录信息的存储
  3. ansible roles和django项目的整合
  4. 通过operator部署redis集群(ucloud版)
  5. JavaFX场景切换代码示例
  6. Istio 自动注入 sidecar 不成功及k8s安装istio后pod无法创建解决方案
  7. MySQL查询过程及Scheme设计与数据类型优化
  8. Linux CentOS 6.x设置静态IP(亲测有效)
  9. 请简述一下线程的sleep()方法和yield()方法的区别?
  10. FastDFS分布式文件系统工作原理