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操作让一个主任务等待它所创建的子任务的完成,执行这个任务的线程被称为 工作者线程
工作者线程寻找其他仍未被执行的任务,然后开始执行。
四、Fork/Join框架的限制什么是工作窃取算法?
工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行
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:用于任务又返回结果的场景
- Java并发编程-23-Fork/Join 框架概述
- Java并发编程--Fork/Join框架使用
- java并发Fork/join框架-java并发编程的艺术
- Java并发-Fork/Join框架
- Java并发框架Fork/Join
- 【Java并发编程】Fork/Join
- 《Java并发编程的艺术》读书笔记:Fork/Join框架
- Java并发编程系列之二十:Fork/Join框架
- Java并发编程-Fork/Join框架同步与异常
- Java并发编程五:Fork/Join框架介绍
- java并发编程的艺术---Fork/Join框架介绍
- Java并发编程艺术 6 Fork/Join框架
- Java 并发编程(七)Fork/Join框架
- 【并发】Fork/join框架
- java并发 java7之fork-join框架
- Java并发基础(九)-Fork/Join框架
- java并发之Fork/Join框架
- Java并发——Fork/Join框架
- php 什么是常量?
- 多线程05-cell照片下载
- hadoop2.5.2下安装Hive0.14
- java中的(静态类)static class
- 金牌、银牌、铜牌
- Java并发编程-23-Fork/Join 框架概述
- HDFS分布式文件系统常用命令
- Java基础之继承
- CentOS 7.0编译安装配置mysql-5.6.20
- H - 迷宫问题 POJ3984 (BFS+DFS)
- Ubuntu 更新错误修复大全
- 禁止输入框显示用户历史输入历史记录
- 利用boostrap模拟框做上传
- 钥匙计数之一(递推)hdu1438