Java并发编程-23-Fork/Join 框架概述

来源:互联网 发布:淘宝会员等级怎么看 编辑:程序博客网 时间:2024/03/29 02:16

一、Java 并发的总结

1、通常,使用Java开发简单的并发应用程序时,会创建一些Runnable对象,然后创建对应的Thread对象来控制程序这些线程的创建,执行,以及线程的状态

2、Java 5引入了Executor和ExecutorService接口以及实现这两个接口的的类,比如ThreadPoolExecutor之后,使得Java在并发上得到进一步的提升,执行器框架将任务的创建和执行进行了分离,通过这个框架,只需要实现Runnable接口的对象和使用Executor对象,然后将Runnable对象发送给执行器,执行器再负责这些任务运行所需的线程,包括线程的创建,管理和结束

3、Java 7更进一步,它包括了ExecutorService接口的另一种实现,用来解决特殊类型的问题。它就是Fork/Join框架

二、Fork/Join框架

1、能解决什么问题?

Fork/Join框架 是用来解决能够通过分治技术将问题拆分成小任务的问题。在一个问题中,先检查要解决的问题的大小

如果大于一个设定的大小,那就将问题拆分成可以通过框架来执行的小任务,如果问题的大小比设定的问题大小要小,那么就在任务里解决问题

然后根据需要 返回任务的结果

2、没有固定的公式来决定问题的参考大小,从而决定一个任务是需要进行拆分还是不需要拆分,拆分与否仍是依赖与任务本身的特性

可以使用在任务中将要处理的任务的数目和处理时间来参考大小

3、测试不同的参考大小来决定解决问题的最好方案。

将ForkJoinPool类看做一个特殊的Executor执行器类型,这个框架基于一下两种操作:

  • Fork操作:当需要将一个任务拆分成更小的多个任务时,在框架中执行这些任务
  • Join操作:当一个主任务等待其创建的多个子任务的完成执行


三、与执行器框架的比较

主要区别是:工作窃取算法

Fork/Join框架 使用Join操作让一个主任务等待它所创建的子任务的完成,执行这个任务的线程被称为 工作者线程

工作者线程寻找其他仍未被执行的任务,然后开始执行。

什么是工作窃取算法?

工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行

四、Fork/Join框架的限制

1、任务只能使用fork()和join()操作当做同步机制

如果使用其他同步机制,工作者线程就不能执行其他任务。

2、任务不能执行I/O操作

3、任务不能抛出非运行时异常,必须在代码里处理掉这些异常


五、Fork/Join框架的核心

1、ForkJoinPool:这个类实现了ExecutorService接口和工作窃取算法,它管理工作者线程,并提供任务的状态信息,以及任务的执行信息

2、Fork/JoinTask:这个类是将在ForkJoinPool中执行的任务的基类

3、Fork/Join框架 提供了一个在任务里执行fork()、Join()操作的机制和控制任务状态的方法。

通常,为了实现Fork/Join任务,需要实现一个一下两个类之一的子类
  • RecursiveAction: 用于任务没有返回结果的场景
  • RecursiveTask:用于任务又返回结果的场景
0 0
原创粉丝点击