您当前的位置: 首页 >  Java

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java ForkJoinPool分支合并框架

Charge8 发布时间:2020-06-26 17:21:31 ,浏览量:2

一、ForkJoinPool 分支合并框架

ForkJoinPool类实现了ExecutorService接口,因此也属于线程池,是一种特殊的线程池。

ForkJoinPool这个工具类从Java7 才开始提供的,优势在于,可以充分利用多cpu,多核cpu的优势,把一个大任务(fork)成若干小任务,把若干小任务放到多个处理器核心上并行执行;当这些小任务执行完成之后,最终汇总(Join)每个小任务结果后得到大任务结果的框架。从而实现用少量的线程,完成大数量的任务。

1、ThreadPoolExecutor 与 ForkJoinPool区别

ForkJoinPool与ThreadPoolExecutor两个都实现了Executor和ExecutorService接口。

ForkJoinPool它使用了一个无限队列来保存需要执行的任务,而线程的数量则是通过构造函数传入,如果没有向构造函数中传入希望的线程数量,那么当前计算机可用的CPU数量会被设置为线程数量作为默认值。使用ForkJoinPool能够使用数量有限的线程来完成非常多的具有父子关系的任务,

ThreadPoolExecutor能够提高线程的可管理性,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度。但是,由于ThreadPoolExecutor中的Thread无法选择优先执行子任务,所以不能完成父子关系的任务。

 

2、使用方法

创建 ForkJoinPool 实例,然后调用ForkJoinPool的 submit(ForkJoinTask task) 或invoke(ForkJoinTask task)方法来执行指定任务了。其中 ForkJoinTask代表一个可以并行、合并的任务。

ForkJoinTask是一个抽象类,它还有两个抽象子类:RecusiveAction和RecusiveTask。其中RecusiveTask代表有返回值的任务,而RecusiveAction代表没有返回值的任务。

    •  ForkJoinTasksubmit(ForkJoinTask task)

      提交forkjointask执行。

      ForkJoinTasksubmit(Runnable task)

      提交执行一个Runnable任务并返回一个表示该任务的未来。

       ForkJoinTasksubmit(Runnable task, T result)

      提交执行一个Runnable任务并返回一个表示该任务的未来。

       Tinvoke(ForkJoinTask task)

      完成给定的任务,完成后返回其结果。

       ListinvokeAll(Collection
关注
打赏
1664721914
查看更多评论
0.0391s