java.util.concurrent
public class ForkJoinPool extends AbstractExecutorService
public abstract class ForkJoinTask<V> implements Future<V>, Serializable
public class ForkJoinWorkerThread extends Thread
Fork/Join
Fork/Join
技术是分治算法(Divide-and-Conquer)的并行实现,它是一项可以获得良好的并行性能的简单且高效的设计技术。
目的是为了帮助我们更好地利用多处理器带来的好处,使用所有可用的运算能力来提升应用的性能。
Fork/Join
框架主要由ForkJoinPool
、ForkJoinWorkerThread
和ForkJoinTask
来实现ForkJoinPool
中只可以运行ForkJoinTask
类型的任务
(在实际使用中,也可以接收Runnable/Callable
任务,但在真正运行时,也会把这些任务封装成ForkJoinTask
类型的任务)ForkJoinTask
表示一个任务,
ForkJoinTask
的子类中有RecursiveAction
和RecursiveTask
RecursiveAction
无返回结果,RecursiveTask
有返回结果
工作中,一般重写RecursiveAction
或RecursiveTask
的compute()
,完成计算或者可以进行任务拆分。- 调用
ForkJoinTask
的fork()
的方法,可以让其他空闲的线程执行这个ForkJoinTask
调用ForkJoinTask
的join()
的方法,将多个小任务的结果进行汇总。 ForkJoinWorkerThread
是运行ForkJoinTask
任务的工作线程
ForkJoinPool
ForkJoinPool
并行的实现了分治算法(Divide-and-Conquer):把任务递归的拆分为各个子任务,这样可以更好的利用系统资源
ForkJoinPool
中的任务分为两种:
- 一种是本地提交的任务(Submission task,如 execute、submit 提交的任务)
- 另外一种是 fork 出的子任务(Worker task)
感谢
- JUC很多内容参见了这位大佬的文章。
- 本人初学java,想要深究源码,请移步。
随笔只对本人看得懂的部分做了一些总结。 - 同时也参考了许多别的博主的文章,在这里统一感谢