ExecutorCompletionService理解记忆
java.util.concurrent
类 ExecutorCompletionService<V>
java.lang.Object
继承者 java.util.concurrent.ExecutorCompletionService<V>
所有已实现的接口:
CompletionService<V>
它实现了CompletionService接口,它使用在构造函数中提供的Executor来执行任务的。它会把完成了的任务放一个队列中, 外部可以通过take(),poll(),poll(long timeout,TimeUnit unit)来取得。该类非常轻便,适合于在执行几组任务时临时使用。
用法示例。 假定您有针对某个问题的一组求解程序,每个求解程序都能返回某种类型的 Result 值,
并且您想同时运行它们,使用方法 use(Result r) 处理返回非 null 值的每个求解程序的返回结果。
可以这样编写程序:
void solve(Executor e,
Collection> solvers)
throws InterruptedException, ExecutionException {
CompletionService ecs
= new ExecutorCompletionService(e);
for (Callable s : solvers)
ecs.submit(s);
int n = solvers.size();
for (int i = 0; i < n; ++i) {
Result r = ecs.take().get();
if (r != null)
use(r);
}}
假定您想使用任务集中的第一个非 null 结果,而忽略任何遇到异常的任务,并且在第一个任务完成时取消其他所有任务:
void solve(Executor e,
Collection> solvers)
throws InterruptedException {
CompletionService ecs
= new ExecutorCompletionService(e);
int n = solvers.size();
List> futures
= new ArrayList>(n);
Result result = null;
try {
for (Callable s : solvers)
futures.add(ecs.submit(s));
for (int i = 0; i < n; ++i) {
try {
Result r = ecs.take().get();
if (r != null) {
result = r;
break;
} catch (ExecutionException ignore) {}
}
}
finally {
for (Future f : futures)
f.cancel(true);
} if (result != null)
use(result);
}}
主要构造函数
public ExecutorCompletionService(Executor executor)
使用为执行基本任务而提供的执行程序创建一个 ExecutorCompletionService,并将 LinkedBlockingQueue 作为完成队列。
参数:
executor - 要使用的执行程序
抛出:
NullPointerException - 如果执行程序为 null
public ExecutorCompletionService(Executor executor,BlockingQueue<Future<V>> completionQueue)
使用为执行基本任务而提供的执行程序创建一个 ExecutorCompletionService,并将所提供的队列作为其完成队列。
参数:
executor - 要使用的执行程序
completionQueue - 用作完成队列的队列,通常是专供此服务使用的队列
抛出:
NullPointerException - 如果执行程序或 completionQueue 为 null
public Future<V> submit(Callable<V> task)
从接口 CompletionService 复制的描述
提交要执行的值返回任务,并返回表示挂起的任务结果的 Future。在完成时,可能会提取或轮询此任务。
指定者:
接口 CompletionService<V> 中的 submit
参数:
task - 要提交的任务
返回:
一个表示挂起的任务完成的 Future
public Future<V> submit(Runnable task,V result)
从接口 CompletionService 复制的描述
提交要执行的 Runnable 任务,并返回一个表示任务完成的 Future,可以提取或轮询此任务。
指定者:
接口 CompletionService<V> 中的 submit
参数:
task - 要提交的任务
result - 要返回的已成功完成任务的结果
返回:
一个表示挂起的任务完成的 Future,其 get() 方法将返回完成时给出的结果值
public Future<V> take()
throws InterruptedException
从接口 CompletionService 复制的描述
获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则等待。
指定者:
接口 CompletionService<V> 中的 take
返回:
表示下一个已完成任务的 Future
抛出:
InterruptedException - 如果在等待时被中断
public Future<V> poll()
从接口 CompletionService 复制的描述
获取并移除表示下一个已完成任务的 Future,如果不存在这样的任务,则返回 null。
指定者:
接口 CompletionService<V> 中的 poll
返回:
表示下一个已完成任务的 Future;如果不存在这样的任务,则返回 null
public Future<V> poll(long timeout,
TimeUnit unit)
throws InterruptedException
从接口 CompletionService 复制的描述
获取并移除表示下一个已完成任务的 Future,如果目前不存在这样的任务,则将等待指定的时间(如果有必要)。
指定者:
接口 CompletionService<V> 中的 poll
参数:
timeout - 放弃之前需要等待的时间长度,以 unit 为时间单位
unit - 确定如何解释 timeout 参数的 TimeUnit
返回:
表示下一个已完成任务的 Future;如果等待了指定时间仍然不存在这样的任务,则返回 null
抛出:
InterruptedException - 如果在等待时被中断
ExecutorCompletionService理解记忆的更多相关文章
- 真香,理解记忆法学习Python基础语法
这篇文章很难写!我最开始学 Python,和大多数人一样,是看的菜鸟教程: 在写完这篇文章的第一遍后,我发现并没有写出新意,很可能读者看到后,会和我当初一样,很快就忘了.我现在已经不是读者而是作者了, ...
- 理解记忆三种常见字符编码:ASCII, Unicode,UTF-8
理解什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是25 ...
- ajax获取数据的形象比喻,助于理解记忆
过程 创建对象(打开浏览器) 连接服务器(输入网址) 发送请求(按下回车) 服务器接收并返回数据(显示对应的网址网站内容) 原理
- Array.splice()理解记忆
var arr = [0,1,2,3,4,5,6,7,8,9]; arr.splice(0,0,"添加项1"); //arr => ["添加项",0,1, ...
- 浅谈Js原型的理解
一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面的专有名词!如果你没 ...
- JavaScript 对象的创建和对6种继承模式的理解和遐想
JS中总共有六种继承模式,包括原型链.借用构造函数.组合继承.原型式继承寄生式继承和寄生组合式继承.为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述. 很长的一个故事,姑且起个名字叫 ...
- js的面向对象的程序设计之理解继承
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(六) 先来解析下标题——对象和继承~ 一.对象篇 ECMA-262把对象的定义为:&qu ...
- cookie和session的个人理解
这是我学习后的个人理解 欢迎提点 如果说的不是很正确请纠正 COOKIE: 1.服务端给浏览器客户端返回一个编号(COOKIE值) 2.这个值存在浏览器中,接下来浏览器再次访问我的时候,会把这个值带 ...
- 37.js----浅谈js原型的理解
浅谈Js原型的理解 一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面 ...
随机推荐
- python类(4)——自己造第一个轮子
先做简单版本,再一步步增加功能 1.简单目的:要实现这样一个功能,能够连接服务器,登录账号,查询账号委托信息,如果有委托信息,撤销委托. 属性(不同账户之间差别):账户,密码 方法(不同账户之间都要用 ...
- Arduino学习——u8glib提供的字体样式
Fonts, Capital A Height4 Pixel Height U8glib Font FontStruct5 Pixel Height 04 Font 04 Font 04 Font ...
- 干货 | 京东云原生容器—SpringCloud实践(一)
"云原生"成为近年热词并不是一种偶然,它不是一个软件,也不是一种框架,而是一堆理念集合,以及围绕这些理念所产生的一些最佳实践的工具.云原生天然就是作用于服务架构的,可以视作一个服务 ...
- MSE(均方误差)、RMSE (均方根误差)、MAE (平均绝对误差)
1.MSE(均方误差)(Mean Square Error) MSE是真实值与预测值的差值的平方然后求和平均. 范围[0,+∞),当预测值与真实值完全相同时为0,误差越大,该值越大. import n ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: DOM
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- “杀死”纸质名片!HiHello能重构商业关系网吗?
在当下的互联网时代,要添加好友去扩大自己的社交圈似乎是再简单不过.随便点击一个微信名片.与其他网友互相关注微博等,好像就又搭建了一个社交节点.暂且不讨论这些好友关系的质量问题,单是这样的方式并不适合于 ...
- Html4.0.1 标签使用笔记
1.lang=zh,en有什么用? 告诉搜索引擎爬虫,网站是关于什么内容的,优先显示网站排名.一般竞价排名,根据百度搜索引擎,需要签订关键词协议,首页第一个竞价排名大概是30-50元/条,竞价排名范围 ...
- 用一行Python进行数据收集探索
简易的Pandas之路 任何使用Python数据的人都会熟悉Pandas包.Pandas是大多数行和列格式数据的go-to包.如果你没有Pandas,请确保在终端中使用pip install安装: p ...
- 201312-1 出现次数最多的数Java
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Scanner; ...
- Go-map-字符串-指针-结构体
Maps 什么是 map ? 类似Python中的字典数据类型,以k:v键值对的形式. map 是在 Go 中将值(value)与键(key)关联的内置类型.通过相应的键可以获取到值. 如何创建 ma ...