Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程
package com.demo.test4; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit; /**
* @author QQ: 1236897 如果超过限制时间则取消超时线程
*
*/
public class InvokeDemo { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService exec = Executors.newCachedThreadPool();
List<SearchTask> searchTasks = new ArrayList<SearchTask>();
SearchTask st = null;
for (int i = 0; i < 10; i++) {
st = new SearchTask(i, 200);// 指定2001 毫米为最大执行时间
if (i == 5)
st = new SearchTask(i, 2001);// 指定2001 毫米为最大执行时间
searchTasks.add(st);
} try {
// 要求认为在2000毫秒内返回结果,否则取消执行。
List<Future<List<Person>>> futures = exec.invokeAll(searchTasks,
2000, TimeUnit.MILLISECONDS);// invokeAll
// 第一个参数是任务列表;第二个参数是过期时间;第三个是过期时间单位
int count = 0;
for (Future<List<Person>> future : futures) {
try {
List<Person> students = future.get();
for (Person student : students) {
System.out.println(student.toString());
}
} catch (CancellationException e) {
System.out.println("cancel");
future.cancel(true);
}
System.out.println("-----------------------" + count
+ "--------------------");
count++;
}
exec.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.interrupted();
} catch (ExecutionException e) {
e.printStackTrace();
}
} } /**
* @filename: SearchTask
* @description: 查询任务
* @author lida
* @date 2013-4-1 下午3:02:29
*/
class SearchTask implements Callable<List<Person>> { public final int classID;
public long sleepTime; /**
* <p>
* Title:
* </p>
* <p>
* Description:
* </p>
*
* @param classID
* 班级编号
* @param sleepTime
* 模拟操作所用的时间数(毫秒)
*/
SearchTask(int classID, long sleepTime) {
this.classID = classID;
this.sleepTime = sleepTime;
} @Override
public List<Person> call() throws Exception {
// 模拟操作所用的时间数(毫秒)
Thread.sleep(sleepTime);
List<Person> stuList = new ArrayList<Person>();
Person p = new Person(1, "name", 2);
Person p2 = new Person(2, "name", 3);
stuList.add(p);
stuList.add(p2);
return stuList;
} } class Person {
private int id;
private String name;
private int classID; public Person(int id, String name, int classID) {
this.id = id;
this.name = name;
this.classID = classID;
} public String toString() {
return Person.class.getName() + "(id:" + this.id + ",name:" + this.name
+ ")";
} }
Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程的更多相关文章
- 逆向工程之修改关键CALL返回值_破解视频转换专家
1)注册软件随便输入注册名注册码 2)进入软件根目录,发送到PEID查壳 3)发现无壳 4)发送到OD 4.1)右键菜单选择智能搜索 4.2)找到关键信息点注册 4.3)找到关键信息点双击进入汇编,向 ...
- Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)
package com; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; i ...
- 第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。
一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程.线程等待.线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的 ...
- Callable接口--有返回值的线程
Callable java5之前是没有返回值的,Java5新增了Callable接口获得线程的返回值,可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口.Cal ...
- 获取Java线程返回值的几种方式
在实际开发过程中,我们有时候会遇到主线程调用子线程,要等待子线程返回的结果来进行下一步动作的业务. 那么怎么获取子线程返回的值呢,我这里总结了三种方式: 主线程等待. Join方法等待. 实现Call ...
- Java--Callable与返回值future
package com; import java.util.concurrent.*; /** * Created by yangyu on 16/11/28. */ /** * Callable a ...
- Java多线程-Callable的Future返回值的使用
一般使用线程池执行任务都是调用的execute方法,这个方法定义在Executor接口中: public interface Executor { void execute(Runnable comm ...
- c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询
天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. 不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...
- C#秘密武器之多线程——参数与返回值
线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...
随机推荐
- javascript AES加密 C#AES解密实现
首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...
- Linux 中 x86 的内联汇编
工程中需要用到内联汇编,找到一篇不错的文章,趁机学习下. 原文地址:http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ 如果 ...
- Android Environment 类详解
Android应用开发中,常使用Environment类去获取外部存储目录,在访问外部存储之前一定要先判断外部存储是否已经是可使用(已挂载&可使用)状态, 并且需要在AndroidManife ...
- JavaEE5 Tutorial_Servlet
Web资源:web组件,静态web文件如图片 Web程序:可发布的Web资源集合 Web程序根目录下有个web-inf文件夹,如果只有jsp和静态资源,里面可以没有web.xml 根目录下可以直接 ...
- mahout协同过滤算法
一直使用mahout的RowSimilarity来计算物品间的相似度,今晚仔细看了其实现,终于搞明白了他的计算逻辑. 上篇中介绍了整个itemBaseCF的mapreducer过程,主要有三个大的步骤 ...
- EmEditor正则表达式例子
正则表达式中 单词指的是由字母.数字.下划线组合而成的字符串,用符号表示为\w(小写). 空白符包括单字节空格.双字节空格.制表符,用符号表示为\s(小写). 1.匹配被双引号包含的所有字符串(str ...
- CORBA
公共对象请求代理体系结构(Common Object Request Broker Architecture)
- 卸载 Cloudera Manager 5.1.x.和 相关软件【官网翻译】
问题导读: 1.不同的安装方式,卸载方法存在什么区别?2.不同的操作系统,卸载 Cloudera Manager Server and 数据库有什么区别? 重新安装不完整如果你来到这里,因为你的安装没 ...
- as3 中trace() 函数对效率的影响
进行页游开发的过程中,很多开发者都有一个习惯,在数据输出中添加trace()函数来跟踪数值 - 不进行条件编译,发布的时候也不删除.实际上大量的trace函数会降低程序的效率,我们可以用一个简单的例子 ...
- eucalyptus,openNebula云构建漫谈
Eucalyptus篇 万事在于理解,技术研究贵在入脑入心.生活很苦,乐趣何在,在于君心?不能修心,则诸事繁杂!闲来无事,阅读官网文档遇此 two Why selecter?因此分享给亲们!亲,那么我 ...