1. Fork/Join框架

fork操作的作用是把一个大的问题划分成若干个较小的问题。在这个划分过程一般是递归进行的。直到可以直接进行计算。需要恰当地选取子问题的大小。太大的子问题不利于通过并行方式来提高性能,而太小的子问题则会带来较大的额外开销。每个子问题计算完成后,可以得到关于整个问题的部分解。join操作的作用是把这些分解手机组织起来,得到完整解。

简单的说,ForkJoin其核心思想就是分治。Fork分解任务,Join收集数据。

2. Fork/Join框架的主要类

一个fork/join框架之下的任务由ForkJoinTask类表示。ForkJoinTask实现了Future接口,可以按照Future接口的方式来使用。在ForkJoinTask类中之重要的两个方法fork和join。fork方法用以一部方式启动任务的执行,join方法则等待任务完成并返回指向结果。在创建自己的任务是,最好不要直接继承自ForkJoinTask类,而要继承自ForkJoinTask类的子类RecurisiveTask或RecurisiveAction类。两种的区别在于RecurisiveTask类表示的任务可以返回结果,而RecurisiveAction类不行。

简单总结:

ForkJoin主要提供了两个主要的执行任务的接口。RecurisiveAction与RecurisiveTask 。

  • RecurisiveAction :没有返回值的接口。
  • RecurisiveTask :带有返回值的接口

parallelStream是什么

parallelStream其实就是一个并行执行的流.它通过默认的ForkJoinPool,可能提高你的多线程任务的速度.

parallelStream的作用

Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每个任务都是一个操作,因此像以下的程式片段:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
numbers.parallelStream()
       .forEach(out::println);  
1
2
3
4

parallelStream背后的男人:ForkJoinPool

要想深入的研究parallelStream之前,那么我们必须先了解ForkJoin框架和ForkJoinPool.本文旨在parallelStream,但因为两种关系甚密,故在此简单介绍一下ForkJoinPool,如有兴趣可以更深入的去了解下ForkJoin***(当然,如果你想真正的搞透parallelStream,那么你依然需要先搞透ForkJoinPool).*

ForkJoin框架是从jdk7中新特性,它同ThreadPoolExecutor一样,也实现了Executor和ExecutorService接口。它使用了一个无限队列来保存需要执行的任务,而线程的数量则是通过构造函数传入,如果没有向构造函数中传入希望的线程数量,那么当前计算机可用的CPU数量会被设置为线程数量作为默认值。

工作窃取算法

forkjoin最核心的地方就是利用了现代硬件设备多核,在一个操作时候会有空闲的cpu,那么如何利用好这个空闲的cpu就成了提高性能的关键,而这里我们要提到的工作窃取(work-stealing)算法就是整个forkjion框架的核心理念,工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。

那么为什么需要使用工作窃取算法呢? 
假如我们需要做一个比较大的任务,我们可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,于是把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应,比如A线程负责处理A队列里的任务。但是有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务等待处理。干完活的线程与其等着,不如去帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。而在这时它们会访问同一个队列,所以为了减少窃取任务线程和被窃取任务线程之间的竞争,通常会使用双端队列,被窃取任务线程永远从双端队列的头部拿任务执行,而窃取任务的线程永远从双端队列的尾部拿任务执行。

parallelStream和fork/join 原理和使用相关推荐

  1. java fork join原理_细说Fork/Join框架

    什么是Fork/Join框架? Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果后得到大任务结果的框架.Fork就是把一个大 ...

  2. java fork join原理_Java并发Fork-Join框架原理解析

    1.什么是Foirk/Join框架 Fork/Join框架是Java7提供用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 2.什么是并行流与顺 ...

  3. Fork/Join工作原理解析

    一.如何高效利用CPU 在介绍Fork/Join框架之前,思考一个问题,在多线程的情况下,如何才能高效的利用CPU,以常用的线程池为例,线程池的线程数设置多少合适? 通常调整线程池中的线程数量其核心目 ...

  4. 锁与并发工具包与线程池与LockSupport与Fork/Join框架与并行流串行流与阻塞队列与JPS,jstack命令查看死锁查看线程状态与AQS个人笔记九

    朝闻道,夕死可矣 本文共计 86564字,估计阅读时长1小时 点击进入->Thread源码万字逐行解析 文章目录 本文共计 86564字,估计阅读时长1小时 一锁 二Java中13个原子操作类 ...

  5. Oracle官方教程之Fork/Join

    原文链接,译文链接,译者:Zach,校对:郑旭东 fork/join框架是ExecutorService接口的一种具体实现,目的是为了帮助你更好地利用多处理器带来的好处.它是为那些能够被递归地拆解成子 ...

  6. fork/join 全面剖析,你可以不用,但是不能不懂!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:浮云骑士LIN cnblogs.com/linlinismi ...

  7. java fork_浅谈Java的Fork/Join并发框架

    前几天有写到整合并发结果的文章,于是联想到了Fork/Join.因为在我看来整合并发结果其实就是Fork/Join中的Join步骤.所以今天我就把自己对Fork/Join一些浅显的理解记录下来. 1. ...

  8. 浅谈Java的Fork/Join并发框架

    1. Fork/Join是什么 Oracle的官方给出的定义是:Fork/Join框架是一个实现了ExecutorService接口的多线程处理器.它可以把一个大的任务划分为若干个小的任务并发执行,充 ...

  9. Fork/Join 框架介绍

    参考:https://www.infoq.cn/article/fork-join-introduction 1. 什么是 Fork/Join 框架 Fork/Join 框架是 Java7 提供了的一 ...

最新文章

  1. mapgis编辑属性结构编辑不了_MapGIS67操作手册(3-17)MapGIS67编辑线属性结构的方法...
  2. 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
  3. c++ 返回string_JVM系列之:String.intern和stringTable
  4. TimeOut 超时问题解决方案
  5. Effective Java 思维导图
  6. 用 ABAP 新建本地 Excel 文件并写入数据试读版
  7. 移动安全:Smali语法学习示例与实践
  8. IDEA社区版配置Tomcat
  9. GAN原理,优缺点、应用总结
  10. 超市密码箱c语言程序,超市存包系统C语言.doc
  11. 蓝桥杯大赛——练习系统登录
  12. 生动的ajax图片显示效果,LightBox
  13. su: warning: cannot change directory to : Permission denied ;-bash: bash_profile: Permission denied
  14. Python(x,y)安装
  15. 【资源分享】Prezi的介绍——PPT的取代工具(文末有安装软件教程和大量资源的下载链接)
  16. 【linux报错解决】ECDSA host key for X.X.X.X has changed and you have requested strict checking
  17. 投稿到掘金的文章为什么不通过?
  18. 香橙派OrangePi 4 LTS开发板通过Mini PCIE连接SATA硬盘的操作方法
  19. Ubuntu安装软件备忘录
  20. 华为服务器告警显示风扇不在位,华为机架服务器RH2285 运行时噪声很大故障的解决...

热门文章

  1. 所学计算机课程或艺术技能,浅议小学计算机教学论文
  2. CISSP考点拾遗——分割隧道与全隧道
  3. Python 3.0中ACCESS学习(三) 打开记录集并输出数据
  4. 纯软件方式的双机热备方案深入分析
  5. 【经验】谷歌翻译不能使用的解决方法
  6. (转载)[python学习笔记]Python语言程序设计(北理工 嵩天)
  7. 悦刻汪莹:辞去滴滴高管职位,仅3年身价一跃超千亿剑指中国女首富
  8. 锌矿如何计算机每吨价格,锌精矿价格计算方法
  9. 西屋除湿机:快速干衣除了烘干机你还有更棒的选择
  10. TQQ2440第一节:启动代码