线程池 一 ForkJoinPool

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)的并行实现,它是一项可以获得良好的并行性能的简单且高效的设计技术。
目的是为了帮助我们更好地利用多处理器带来的好处,使用所有可用的运算能力来提升应用的性能。

  1. Fork/Join框架主要由ForkJoinPoolForkJoinWorkerThreadForkJoinTask来实现
  2. ForkJoinPool中只可以运行ForkJoinTask类型的任务
    (在实际使用中,也可以接收Runnable/Callable任务,但在真正运行时,也会把这些任务封装成ForkJoinTask类型的任务)
  3. ForkJoinTask表示一个任务,
    ForkJoinTask的子类中有RecursiveActionRecursiveTask
    RecursiveAction无返回结果,RecursiveTask有返回结果
    工作中,一般重写RecursiveActionRecursiveTaskcompute(),完成计算或者可以进行任务拆分。
  4. 调用ForkJoinTaskfork()的方法,可以让其他空闲的线程执行这个ForkJoinTask
    调用ForkJoinTaskjoin()的方法,将多个小任务的结果进行汇总。
  5. ForkJoinWorkerThread是运行ForkJoinTask任务的工作线程

ForkJoinPool

ForkJoinPool并行的实现了分治算法(Divide-and-Conquer):把任务递归的拆分为各个子任务,这样可以更好的利用系统资源

ForkJoinPool中的任务分为两种:

  1. 一种是本地提交的任务(Submission task,如 execute、submit 提交的任务)
  2. 另外一种是 fork 出的子任务(Worker task)

感谢

  1. JUC很多内容参见了这位大佬的文章。
  2. 本人初学java,想要深究源码,请移步。
    随笔只对本人看得懂的部分做了一些总结。
  3. 同时也参考了许多别的博主的文章,在这里统一感谢

泰迪的bagwell https://www.jianshu.com/u/f57de6e249f6

猜你喜欢

转载自www.cnblogs.com/loveer/p/11416921.html