一、概述

Java 中的 parallelStream 的底层实现为 ForkJoinPool 。
线程池是所有并行流共享的。
线程池的线程数量和CPU核数一致。
需要等待任务全部执行完毕,主线程(调用线程)才继续往下执行。

注意:因为线程池是全局共享的,所以我们尽量不要在 parallelStream 中执行阻塞任务,否则会影响到整个系统中其他的 parallelStream 任务执行的。

二、案例

下面的案例中使用了2个新线程,在其中分别执行 parallelStream 。
线程A启动后,我们暂停2秒,目的是为了让线程A中的任务占满 ForkJoinPool 中的线程,并且每个任务执行后,要暂停10秒,目的是为了方便我们观察 ForkJoinPool 中总共有多少个线程。

    public static void main(String[] args) {try {// 构建list数据List list = new ArrayList<>(20);for (int i = 0; i < 20; i++) {list.add(i);}// 启动第一个线程,在里面执行Thread t_A = new Thread(() -> {list.parallelStream().forEach((i) -> {System.out.println(i + "=====A=====" + Thread.currentThread().getName());try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}});});t_A.start();// 暂停2秒Thread.sleep(2000);//执行第二个线程Thread t_B = new Thread(() -> {list.parallelStream().forEach((i) -> {System.out.println(i + "=====B=====" + Thread.currentThread().getName());});});t_B.start();t_A.join();t_B.join();} catch (InterruptedException e) {e.printStackTrace();}}

执行结果如下:
注意查看,首先线程A中的任务执行了12条(包括调用线程自身),我使用的电脑CPU为12核心。
2秒钟后,线程B开始执行,此时线程A中的12个线程还处于阻塞状态,线程B中的任务,全部由调用线程执行。

12=====A=====Thread-0
6=====A=====ForkJoinPool.commonPool-worker-9
7=====A=====ForkJoinPool.commonPool-worker-6
2=====A=====ForkJoinPool.commonPool-worker-2
8=====A=====ForkJoinPool.commonPool-worker-11
4=====A=====ForkJoinPool.commonPool-worker-4
5=====A=====ForkJoinPool.commonPool-worker-15
1=====A=====ForkJoinPool.commonPool-worker-13
3=====A=====ForkJoinPool.commonPool-worker-8
9=====A=====ForkJoinPool.commonPool-worker-1
0=====A=====ForkJoinPool.commonPool-worker-10
17=====A=====ForkJoinPool.commonPool-worker-3
12=====B=====Thread-1
14=====B=====Thread-1
13=====B=====Thread-1
11=====B=====Thread-1
10=====B=====Thread-1
17=====B=====Thread-1
19=====B=====Thread-1
18=====B=====Thread-1
16=====B=====Thread-1
15=====B=====Thread-1
6=====B=====Thread-1
5=====B=====Thread-1
8=====B=====Thread-1
9=====B=====Thread-1
7=====B=====Thread-1
2=====B=====Thread-1
4=====B=====Thread-1
3=====B=====Thread-1
1=====B=====Thread-1
0=====B=====Thread-1
13=====A=====ForkJoinPool.commonPool-worker-11
18=====A=====ForkJoinPool.commonPool-worker-3
15=====A=====ForkJoinPool.commonPool-worker-9
10=====A=====ForkJoinPool.commonPool-worker-4
19=====A=====ForkJoinPool.commonPool-worker-10
16=====A=====ForkJoinPool.commonPool-worker-1
11=====A=====ForkJoinPool.commonPool-worker-13
14=====A=====ForkJoinPool.commonPool-worker-8

Java中的parallelStream相关推荐

  1. Java中lambda表达式去重_JAVA8中Lambda和Stream

    Java8于2014年3月份发布,其主要更新的特性有:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等,本文将介绍Lambda表达式 ...

  2. java中无限大_Java 9中的无限集

    java中无限大 一套 甲Set是元素的集合,从而在任何给定的元件Set只出现一次. 更正式地说,集合不包含元素e1和e2对,因此e1.equals(e2) . 我们可以像这样在Java 9中轻松创建 ...

  3. Java中Lambda表达式的使用(转)

    https://www.cnblogs.com/franson-2016/p/5593080.html 简介 (译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖" ...

  4. Java中Lambda表达式和stream的使用

    Java中Lambda表达式和stream的使用 转自 [*https://www.cnblogs.com/franson-2016/p/5593080.html*] 简介 (译者注:虽然看着很先进, ...

  5. 在 Java 中如何加快大型集合的处理速度

    什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一.超过 100 万个网站通过某种形式在使用 Java,超过 三分之一 的软件开发人员的工具箱中有 Jav ...

  6. Java中Stream的使用

    Java中Stream的使用 请先了解Lambda表达式的用法,有一定Lambda基础后再进行Stream学习. Lambda博文链接:Lambda表达式的详解 本文来自于B站博主:倜傥的雷哥 的视频 ...

  7. Java中Steam流的用法及使用备忘

    文章目录 Java中Steam流的用法及使用备忘 一. 流的常用创建方法 1-1 使用Collection下的 stream() 和 parallelStream() 方法 1-2 使用Arrays ...

  8. Java中的Stream API简述

    Stream API Stream API概述 为什么要使用Stream API Stream是什么? Stream 的操作:三个步骤 1- 创建 Stream 创建 Stream方式一:通过集合 创 ...

  9. Java中那些让你爱不释手工具库,精炼代码量

    Java中那些让你爱不释手工具库,精炼代码量 一.JDK1.8 Stream新特性 1.Stream流的常见生成方式 ①Collection体系的集合可以使用默认方法stream()生成流 //lis ...

  10. 再也不担心问到Java集合了,一文讲透Java中的数据结构

    Java数据结构实现详解 摘要 1 集合框架 1.1 顶层接口Iterable 1.2 Collection接口 2 List 2.1 List接口 2.2 List实现ArrayList 2.2.1 ...

最新文章

  1. setup.py安装
  2. 明星软件工程师的十种特质
  3. expect安装编译方法
  4. 第94:受限玻尔兹曼机
  5. 11月AI大事件回顾:GPT3开放使用/女娲视觉大模型/AE文艺复兴/...
  6. 人工智能相关领域的国际顶尖会议介绍
  7. python接管已经打开的浏览器_Python Webdriver 从新使用已经打开的浏览器实例
  8. 20+个很棒的Android开源项目
  9. 【人脸识别】基于matlab人脸识别检测脸、眼、鼻子和嘴【含Matlab源码 178期】
  10. html5 统计图 等值线,浅谈WebGIS等值线模态前端展示生成绘制(算法经验)
  11. 恒生杭州历年软件测试笔试题,【恒生电子软件测试面试】首先做一个笔试题,然...-看准网...
  12. java与设计模式-观察者模式
  13. android微信逆向工程,iOS逆向 - 微信自动添加好友
  14. Xmind教程-添加外框
  15. [GXYCTF2019]BabyUpload
  16. OKRs-E,OKR实战基础理论
  17. 【20230204】Ubuntu系统备份与恢复
  18. CoaoaChina开发者小测验常识题
  19. PS肤色调整19大秘诀
  20. Unity【话大】设计模式之模板方法模式

热门文章

  1. 服务器租用多少钱一年呢?
  2. 2021年全球与中国孕妇防辐射服行业市场规模及发展前景分析
  3. 说说 PWA 和微信小程序--Progressive Web App
  4. 林辉高考机器人_“成都造”高考机器人 高考数学成绩稳定在136分
  5. Akka and Actors
  6. [视频]K8软件破解脱壳入门教程
  7. BC26低功耗的OPENCPU代码注意事项
  8. 阿里云的ECS服务器1M宽带等于多少入网kbps和出网kbps
  9. 《C++游戏编程入门 第四版》的例子Blackjack-
  10. N2N组建虚拟局域网——筑梦之路