Java 7开始引入一个新的叉/联接线程池,该量池可以执行特殊任务:将大型任务拆除为并行多个小任务。
让我们举个例子:如果要计算一个大数组的总和,最简单的方法是用一个周期完成一个线程:
算法原则的简介认为,在学习叉式框架之前,您或多或少学到了学到的学历。ForkJoin框架实际上是线程池执行人员服务的实现。通过WorkD -Therealing算法,可以在其他线程中获得未完成的任务。平行,类似于除法算法。
实现目标条目的示例,使用叉/联接框架使用示例。在此示例中,我们计算1-5000后的值:
在这方面,我基于JDK1.8+中的叉/联接框架封装了一个框架。参考叉/联接框架的主要源代码也基于JDK1.8+。
需要注意
forkjoinpool类的属性介绍
forkjointask是一个抽象类,可以在forkjoinpool中执行。父班是未来。有许多特定的实施类。在这里,我们主要关注递归和递归术。
介绍forkjointask类属性:状态:其他工作线程和池可以看到任务的状态。该操作是正常的,异常情况是积极的。
forkjointask函数简介只需要实现其Compute()方法,即可在Compute(),任务分解(FORK)和结果合并(JOIN)中执行最小任务控制。
在Forkjoinpool中执行的默认线程是Forkjoinworkrthread。它是由默认工厂生成的,可以重写要自身实现的工作线程。在同一时间,forkjoinpool被引用到偷窃时使用的每个工作线程。
forkjoinworkerThread分类简介
实际上,叉/联接框架的内部工作过程比这张图片要复杂得多。例如,如何确定哪个线程用于某个递归任务;在内部后,您是创建一个新线程以运行还是让其等待队列。
可以说,在加入方法中提供的叉法和联接方法可以说是/加入框架的方法是框架中提供的两个最重要的方法。他们与并行性合作“并行任务的数量”。
当forkjootask任务调用fork()方法时,引入叉子方法时,当前线程将将此任务放入队列数组的queuetop位置,然后执行以下两个代码:
当调用SignalWork()方法时。SignalWork()方法做了两件事:1。调用前线;2.当没有活动线程或线程数很小时,请添加一个新线程。
加入方法简介加入是一个连续等待和获得任务执行结果的过程。
让我们看一下关节托方法
作者:Li Haoyu Alex