博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程
阅读量:7224 次
发布时间:2019-06-29

本文共 2761 字,大约阅读时间需要 9 分钟。

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
searchTasks = new ArrayList
(); 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
>> futures = exec.invokeAll(searchTasks, 2000, TimeUnit.MILLISECONDS);// invokeAll // 第一个参数是任务列表;第二个参数是过期时间;第三个是过期时间单位 int count = 0; for (Future
> future : futures) { try { List
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
> { public final int classID; public long sleepTime; /** *

* Title: *

*

* Description: *

* * @param classID * 班级编号 * @param sleepTime * 模拟操作所用的时间数(毫秒) */ SearchTask(int classID, long sleepTime) { this.classID = classID; this.sleepTime = sleepTime; } @Override public List
call() throws Exception { // 模拟操作所用的时间数(毫秒) Thread.sleep(sleepTime); List
stuList = new ArrayList
(); 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 + ")"; }}

 

转载于:https://www.cnblogs.com/MarchThree/p/4771225.html

你可能感兴趣的文章
iPhone: 对象沿路径动画
查看>>
C#与Java的RSA(1)
查看>>
HowTO:不用重装系统就地升级到更高 Windows 版本
查看>>
Server08 R2 Live Migration 测试 Part 5:Live Migration测试
查看>>
升级Exchange server 2010 SP1至SP3版本相关问题解决方法
查看>>
Struts2文件上传实例
查看>>
Liferay 从Dockbar 添加Portlet的事件细节研究
查看>>
Windows Server组策略应用顺序
查看>>
自己对精细化运维的理解
查看>>
以求医为例谈搜索引擎排序算法的基础原理
查看>>
网上Unused Index Script 脚本的问题
查看>>
数据仓库专题(2)-Kimball维度建模四步骤
查看>>
搞定微信告警-工具篇
查看>>
如何在java swing/awt中单击右键弹出一个菜单
查看>>
ORACLE 修改schemas的方法一
查看>>
C++构造函数调用顺序
查看>>
“域控制器安全策略”打开错误的解决方法
查看>>
为SharePoint搜索创建自定义优化参数
查看>>
linux文件
查看>>
Exchange Powershell查看用户最后登陆邮箱时间
查看>>