在JDK并发包中有这么一个类ExecutorCompletionService,提交任务后,能够按任务返回结果的先后顺序来获取各任务运行后的结果。

该类实现了接口CompletionService:

public interface CompletionService<V> {Future<V> submit(Callable<V> task);Future<V> submit(Runnable task, V result);Future<V> take() throws InterruptedException;Future<V> poll();Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException;}

该接口定义了一系列方法:提交实现了Callable或Runnable接口的任务。并获取这些任务的结果。

ExecutorCompletionService实现了CompletionService。内部通过Executor以及BlockingQueue来实现接口提出的规范。当中,Executor由调用者传递进来。而Blocking能够使用默认的LinkedBlockingQueue,也能够由调用者传递。另外,该类还会将提交的任务封装成QueueingFuture,这样就能够实现FutureTask.done()方法,以便于在任务运行完成后,将结果放入堵塞队列中。

QueueingFuture为内部类:

private class QueueingFuture extends FutureTask<Void> {QueueingFuture(RunnableFuture<V> task) {super(task, null);this.task = task;}protected void done() { completionQueue.add(task); }private final Future<V> task;}

当中。done()方法就是在任务运行完成后,将任务放入队列中。

在提交任务时,将任务封装成QueueingFuture:

public Future<V> submit(Callable<V> task) {if (task == null) throw new NullPointerException();RunnableFuture<V> f = newTaskFor(task);executor.execute(new QueueingFuture(f));return f;}

在调用take()、poll()方法时,会从堵塞队列中获取Future对象,以取得任务运行的结果。



ExecutorCompletionService原理具体解释相关推荐

  1. 循环神经网络(RNN)原理通俗解释

    循环神经网络(RNN)原理通俗解释 1.RNN怎么来的? 2.RNN的网络结构及原理 3.RNN的改进1:双向RNN 4.RNN的改进2:深层双向RNN 4.1 Pyramidal RNN 5.RNN ...

  2. 地震勘探原理名词解释

    地震勘探原理名词解释(复习一下) (2010-11-21 22:22:07) 转载▼   分类: 专业知识 地震勘探:通过人工方法激发地震波,研究地震波在地层中传播的情况,以查明地下的地质构造,力寻找 ...

  3. 机械臂正向运动学原理通俗解释

    机械臂正向运动学理解原理通俗解释 正向运动学可以理解为关节运动量的传递. 定性理解:关节的运动量都是以在前面一个关节上建立的坐标系为参考旋转多少角度,一个关节运动会带动后面的关节运动,会导致固定在关节 ...

  4. mpls工作原理通俗解释_用这两种方法向最终用户解释NLP模型的工作原理还是不错的...

    点击上方关注,All in AI中国 上周,我看了一个关于"NLP的实践特性工程"的演讲.主要是关于LIME和SHAP在文本分类可解释性方面是如何工作的. 我决定写一篇关于它们的文 ...

  5. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明

    在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...

  6. Java虚拟机工作原理具体解释

    一.类载入器 首先来看一下java程序的运行过程. 从这个框图非常easy大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘其中.然后你在命令行中输入 javac YourClass ...

  7. java虚拟机工作原理_Java虚拟机工作原理具体解释

    一.类载入器 首先来看一下java程序的运行过程. 从这个框图非常easy大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘其中.然后你在命令行中输入 javac YourClass ...

  8. 抢票原理通俗解释,​候补购票是什么?你还在交智商税吗?

    以下为抢票通俗解释与说明 基本事实: 所有的票都由12306放出,所有购票都基于12306. 概念: 单一程序抢票:由程序快速刷新12306购票(可理解为一个爬虫程序) 抢票平台抢票:基于程序抢票(可 ...

  9. 朴素贝叶斯的三个常用模型: 高斯、多项、伯努利的原理和解释

    在学习用朴素贝叶斯模型做文本分类的时候, 发现朴素贝叶斯是基于三个常用的模型, 高斯, 多项式, 和伯努利,所以查资料发现了一篇比较好的博客解释着三个模型的原理和区别. 所以转载一下: 原文出处:ht ...

最新文章

  1. 《树莓派渗透测试实战》——2.7 设置SSH服务
  2. vue2.0 新手教程(一)
  3. fedora java环境变量_Fedora Linux,JDK安装与配置环境变量
  4. SAP Spartacus converter执行的上下文
  5. 你必须知道的CSS盒模型,面试建议
  6. java setDataSource 报红
  7. OpenGL之路(六)贴图
  8. JS设置Cookie,及COOKIE的限制
  9. 为什么 Java 不支持类多重继承?
  10. 【语音合成】基于matlab线性预测系数和预测误差语音合成【含Matlab源码 564期】
  11. github视频教程-03 如何使用github上pull-request功能(VS2013)
  12. 【MATLAB信号处理】信号波形的产生及系统时域分析
  13. 一个免费、大小仅几MB但超好用的卸载工具——Geek Uninstaller
  14. soul软件的简单分析
  15. React+Antd中修改分页组件的英文显示
  16. 网页怎么算切屏_电脑怎么切屏
  17. SWF文件格式说明书--SWF文件头
  18. Excel如何批量删除空白表
  19. word如何首页和目录不编辑页码
  20. 7.5 ZUFEIOJ E: 守望者的逃离 贪心

热门文章

  1. 一个sqlserver数据库表查看与备份软件
  2. 学习旧岛小程序 (4)封装api 请求
  3. Hibernate学习(二)
  4. 51Nod 1007 正整数分组 | DP (01背包)
  5. MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别
  6. Struts2国际化文件乱码解决
  7. 九度OJ 1019:简单计算器 (基础题、DP)
  8. 在SQL Server中sqlserver,access,excel之间数据如何使用sql语句直接操作
  9. 学术墙报模板_【学院动态】水产学院2020年研究生学术年会科研墙报评比活动开始...
  10. php动态网站开发报告,PHP动态网站开发pdf