首页 Java8-并行流(parallelStream)原理分析及线程池线数设置

Java8-并行流(parallelStream)原理分析及线程池线数设置

举报
开通vip

Java8-并行流(parallelStream)原理分析及线程池线数设置  Java8并行流(parallelStream)原理分析及线程池线数设置  我们都知道在java使用strem流做多线程处理是非常方便的。list.parallelStream().forEach(s->{//业务处理});但是parallelStream是如何实现多线程处理的呢?其实看源码我们会发现parallelStream是使用线程池ForkJoin来调度的,这里我们可以看源码看到由于我们使用的forEach,所以直接看类ForEachOps即可.当然其他方法比如reduce等会有不同的实现类,总的实现类...

Java8-并行流(parallelStream)原理分析及线程池线数设置
  Java8并行流(parallelStream)原理分析及线程池线数设置  我们都知道在java使用strem流做多线程处理是非常方便的。list.parallelStream().forEach(s->{//业务处理});但是parallelStream是如何实现多线程处理的呢?其实看源码我们会发现parallelStream是使用线程池ForkJoin来调度的,这里我们可以看源码看到由于我们使用的forEach,所以直接看类ForEachOps即可.当然其他方法比如reduce等会有不同的实现类,总的实现类是如下几个java.util.stream.FindOps.FindOpjava.util.stream.ForEachOpsjava.util.stream.MatchOps.MatchOpjava.util.stream.ReduceOps.ReduceOp里面基本都是调用evaluateParallel方法而ForEachTask继承关系如下这里就找到了我们的 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 ,核心原理就是ForkJoin框架而ForkJoinPool的默认线程数是CPU核数-1,无参构造方法就可以看出如何设置ForkJoinPool的线程数呢这里有如下几种方法直接构建自己的ForkJoinPoolCountDownLatchcountDownLatch=newCountDownLatch(20);intcpu=Runtime.getRuntime().availableProcessors();System.out.println(cpu);ForkJoinPoolpool=newForkJoinPool(2);Listlist=IntStream.range(0,20).boxed().collect(Collectors.toList());pool.submit(()->{list.parallelStream().forEach(s->{//业务处理System.out.println("thread:"+Thread.currentThread().getName()+"value"+s);countDownLatch.countDown();});});countDownLatch.await();可以看到始终只有2两个线程使用参数设置System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","5");demo验证System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","5");CountDownLatchcountDownLatch=newCountDownLatch(5);Listlist=IntStream.range(0,20).boxed().collect(Collectors.toList());list.parallelStream().forEach(s->{//业务处理System.out.println("thread:"+Thread.currentThread().getName()+"value"+s);countDownLatch.countDown();});countDownLatch.await();intpoolSize=ForkJoinPool.commonPool().getPoolSize();System.out.println("Poolsize:"+poolSize);这里比较奇怪是设置了5个线程,虽然只有5个,但是主线程也加入了执行,这里暂时不做详细研究,有知道的欢迎留言关注博主即可阅读全文 -全文完-
本文档为【Java8-并行流(parallelStream)原理分析及线程池线数设置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
永兴文档
暂无简介~
格式:doc
大小:2MB
软件:Word
页数:7
分类:互联网
上传时间:2023-06-19
浏览量:35