【并发编程】Executor架构介绍


要点总结
Executor表示的任务类型
- Runnable: 无返回值,无异常抛出;
- Callable:有返回值,可以异常抛出;
- Future任务: 表示异步计算,可取消; 通过newTaskFor()方法,将Runnable/Callable任务转换为Future任务;






Future任务的创建方法
- 异步计算:通过get()方法来获取异步计算的结果;
- 可取消;

- 通过FutureTask构造函数来创建;(事实上,FutureTask是Future接口的唯一实现)
- 通过ExecutorService的submit()方法来创建;
- 方式1:通过FutureTask的构造函数来创建;

- 方式2:通过ExecutorService的submit()方法来创建;

Executor框架,任务提交的2种方式
- Executor接口:executor(Runnable command);
- ExecutorService.submit(xxx): 是对Executor接口提交任务的扩充;
- 方式1:
- 方式2:



ExecutorService接口

- 生命周期管理方法;
- 提交任务的简便方法;
shutdown()和shutdownNow()比较
- shutdown():平缓关闭,不会接收新任务的提交,会等待已提交任务全部执行完;
- shutdownNow():粗暴关闭,不会接收新任务的提交,尝试取消正在运行的任务,返回已提交但尚未运行的任务列表;
批量任务:invokeAll()/invokeAny()
方法说明
invokeAll()实现原理

CompletionService接口
- 用于提交批量异步任务,并获取结果;
- 用于将批量异步任务的生产和消费进行解耦;

使用示例

实现原理
- Executor: ExecutorCompletionService委托Executor来执行任务提交操作;
- BlockingQueue: 委托BlockingQueue来保存计算结果;
- 将提交的任务封装为QueueingFuture;
- 委托Executor进行任务提交;
- 重写FutureTask的done()方法,当Future任务执行完成后,调用done(),将Future任务添加到BlockingQueue中;
- 委托BlockingQueue实现获取任务的同步;

CompletionService接口和ExecutorService.invokeAll()比较
- 每次提交1组任务,返回时,也是返回1组任务(Future);
- 必须等待所有任务执行完,才会返回结果,返回的任务列表与提交的任务列表顺序相同;
- 每次提交1个任务,任务执行完成后,会将任务放到BlockingQueue中;
- BlockingQueue中存放的任务顺序,与提交的任务顺序很可能不同,哪个任务先执行完,就先放入哪个任务;
- 不必等待所有任务执行完;

配置ThreadPoolExecutor
附件列表
【并发编程】Executor架构介绍的更多相关文章
- Java 并发编程——Executor框架和线程池原理
Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务 ...
- (转)java并发编程--Executor框架
本文转自https://www.cnblogs.com/MOBIN/p/5436482.html java并发编程--Executor框架 只要用到线程,就可以使用executor.,在开发中如果需要 ...
- Java 并发编程——Executor框架和线程池原理
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
- Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
一.Exectuor框架简介 Java从1.5版本开始,为简化多线程并发编程,引入全新的并发编程包:java.util.concurrent及其并发编程框架(Executor框架). Executor ...
- Java 并发编程 Executor 框架
本文部分摘自<Java 并发编程的艺术> Excutor 框架 1. 两级调度模型 在 HotSpot VM 的线程模型中,Java 线程被一对一映射为本地操作系统线程.在上层,Java ...
- java并发编程-Executor框架
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- Java 并发编程 Executor
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- Java基础篇——线程、并发编程知识点全面介绍(面试、学习的必备索引)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10739579.html,希望大家多多支持!!! 一.线程基础 1.线程与进程 线程是指进程 ...
- java并发编程 Executor,Executors,ExecutorService,CompletionService,Future,C
使用CompletionService获取多线程返回值 CompletionService和ExecutorCompletionService详解 Java并发编程系列之十五:Executor框架
随机推荐
- NOIP2016 “西湖边超萌小松鼠” 模拟赛
总的来说,这套题的难度比较接近近些年来Day1的真实难度,认为非常值得一打 GotoAndPlay 题目大意 询问这个图上是否存在一种跳法,能跳到这个图上的每一个点 题目解析 犯了个低级错误,双向边忘 ...
- POJ 3281 Dining(最大流)
http://poj.org/problem?id=3281 题意: 有n头牛,F种食物和D种饮料,每头牛都有自己喜欢的食物和饮料,每种食物和饮料只能给一头牛,每头牛需要1食物和1饮料.问最多能满足几 ...
- n个数取前k个最小数
算法题:K 个最近的点 给定一些 points 和一个 origin,从 points 中找到 k 个离 origin 最近的点.按照距离由小到大返回.如果两个点有相同距离,则按照x值来排序:若x值也 ...
- 关于浏览器的eventflow(capture and bubble up)
因为,没有全面的学习javascript,及其事件原理: 全占的课程:4-5 浏览器 Bubble Up 事件模型中 不是很理解它所讲的.网上查找相关知识点.记录中在博客中: 理解了JS的加载 htt ...
- 移动APP测试要点总结
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- IOS-网络(文件压缩和解压缩)
// // ViewController.m // IOS_0206_文件上传 // // Created by ma c on 16/2/6. // Copyright © 2016年 博文科技. ...
- 使用springfox+swagger2书写API文档(十八)
使用springfox+swagger2书写API文档 springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfo ...
- EPANET头文件解读系列3——TOOLKIT.H
/******************************************************************** TOOLKIT.H - Prototypes for EPA ...
- 在嵌入式设计中使用MicroBlaze(Vivado版本)
原文Xilinx官方文档<ug898-vivado-embedded-design>第三章 一.MicroBlaze处理器设计介绍(略) 二.创建带有MicroBlaze处理器的IP设计 ...
- 网络编程I/O函数介绍
read和write #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); ssize_t write(in ...