1、poll():马上返回完成的任务,若没有,则返回null

2、poll(long timeout, TimeUnit unit): 等待timeout时间,如果大于最短任务完成时间,则获取任务结果返回,结束等待;如果小于任务完成时间,则等待任务完成,获取结果并返回

实验代码:

import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; public class MyPoll { public static void main(String[] args) {
// TODO 自动生成的方法存根
ExecutorService executor=Executors.newCachedThreadPool();
CompletionService<String> comservice=new ExecutorCompletionService<String>(executor);
MyPollCallble callable=new MyPollCallble();
MyPollCallble_time time_cable=new MyPollCallble_time();
comservice.submit(callable);
comservice.submit(time_cable);
//poll():获取并移除表示下一个已完成任务的future。如果不存完成的任务,则返回null,即不会出现阻塞效果
// System.out.println(comservice.poll());
try {
//等待指定timeout时间,在timeout之内获得值即向下执行,如果超时也向下执行
System.out.println("get1 at"+System.currentTimeMillis());
System.out.println("1 "+comservice.poll(1000, TimeUnit.SECONDS).get());
System.out.println("get2 at"+System.currentTimeMillis());
System.out.println("2 "+comservice.poll(2000, TimeUnit.SECONDS).get());
System.out.println("get3 at"+System.currentTimeMillis());
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (ExecutionException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} }
class MyPollCallble implements Callable<String>{ @Override
public String call() throws Exception {
// TODO 自动生成的方法存根
System.out.println("start");
System.out.println("first "+System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("end "+System.currentTimeMillis());
return "finish";
} }
class MyPollCallble_time implements Callable<String>{ @Override
public String call() throws Exception {
// TODO 自动生成的方法存根
System.out.println("start time");
System.out.println("second "+System.currentTimeMillis());
Thread.sleep(3000);
System.out.println("end time "+System.currentTimeMillis());
return "finish time";
} }

  实验结果:

start
first 1492676279057
get1 at1492676279057
start time
second 1492676279057
end 1492676281061
1 finish
get2 at1492676281061
end time 1492676282064
2 finish time
get3 at1492676282064

  可以看到get1与get2之间相差2秒,表明是在等待任务完成,而不是未获得值继续向下执行

CompletionService的poll方法的更多相关文章

  1. Linux高级字符设备驱动 poll方法(select多路监控原理与实现)

    1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程.      int selec ...

  2. Linux 设备驱动--- Poll 方法 --- Select【转】

    转自:http://blog.csdn.net/yikai2009/article/details/8653842 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] Sele ...

  3. Queue接口分析:add和offer区别,remove和poll方法到底啥区别

    Queue接口: public interface Queue<E> extends Collection<E> { /* * add方法,在不违背队列的容量限制的情况,往队列 ...

  4. Python——IO多路复用之select模块poll方法

    Python——IO多路复用之select模块poll方法 使用poll方法实现IO多路复用 .├── poll_client.py├── poll_server.py└── settings.py ...

  5. java高级---->Thread之CompletionService的使用

    CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理.今天我们通过实例来学习一下CompletionServi ...

  6. 线程框架Executor的用法举例

    java5线程框架Executor的用法举例 Executor 是 java5 下的一个多任务并发执行框架(Doug Lea),可以建立一个类似数据库连接池的线程池来执行任务.这个框架主要由三个接口和 ...

  7. 线程池:Execution框架

    每问题每线程:在于它没有对已创建线程的数量进行任何限制,除非对客户端能够抛出的请求速率进行限制. 下边 有些图片看不到,清看原地址:http://www.360doc.com/content/10/1 ...

  8. Java并发编程核心方法与框架-CompletionService的使用

    接口CompletionService的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离.使用submit()执行任务,使用take取得已完成的任务,并按 ...

  9. KafkaConsumer 长时间地在poll(long )方法中阻塞

    一,问题描述 搭建的用来测试的单节点Kafka集群(Zookeeper和Kafka Broker都在同一台Ubuntu上),在命令行下使用: ./bin/kafka-topics. --replica ...

随机推荐

  1. mysql 外键问题

    清空.删除具有外键约束的表时报ERROR 1701(42000)的解决 解决方法: 解除外键约束mysql> set foreign_key_checks=0; 删除表后添加外键约束 mysql ...

  2. python环境搭建以及pycharm的安装

    要实现python自动化,环境和IDE都是必须的.我选择的是python3.4.4版本以及pycharm社区版.      资源链接:https://pan.baidu.com/s/1hRqyRe3J ...

  3. bzoj3196 二逼平衡树 树状数组套线段树

    题目传送门 思路:树状数组套线段树模板题. 什么是树状数组套线段树,普通的树状数组每个点都是一个权值,而这里的树状数组每个点都是一颗权值线段树,我们用前缀差分的方法求得每个区间的各种信息, 其实关键就 ...

  4. POJ:2456 Aggressive cows(z最大化最小值)

    描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000, ...

  5. 误删除google浏览器用户,如何恢复之前收藏的标签,亲测有效

    第一种方案: 看 路径 C:\Users\admin\AppData\Local\Google\Chrome\User Data\Default  下或者 C:\Users\admin\AppData ...

  6. SiteServer CMS简介

    SiteServer CMS 是中国在.NET平台下.强大的企业站开源CMS内容管理系统和网站群系统. 能够最低的成本.最少的人力投入在最短的时间内架设好一个功能齐全.性能优异.规模庞大并易于维护的网 ...

  7. 在Vue中由后台数据循环生成多选框CheckBox时的注意事项

    多选框是一种非常常见的功能,有时候我们会根据后台返回的数据进行多选框渲染,之前做项目时遇到循环生成多选框时,v-model绑定的值会随着选中与取消改变,但页面却不会变化 的情况,后来测试了一下,发现多 ...

  8. c语言实现队列的基本操作

    话不多说,直接代码 #include"stdio.h" #include"stdlib.h" typedef struct QNode{ int date; s ...

  9. zabbix-proxy 层级制监控

    一,zabbix服务规划 zabbix-server 10.0.0.71 zabbix-proxy 10.0.0.72 172.16.1.72 web01  172.16.1.7 二,zabbix 客 ...

  10. HTML5之WebSocket && https://zhuanlan.zhihu.com/p/23467317

    在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...