ExecutorService invokeAll 实例(转)
10个班级,每个班级20名学生,在指定的时间内查询每个班级学生的集合。
- package cn.com.ld.study.thread;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.Callable;
- 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;
- public class FutureTest {
- //缓存操作数据集
- private static final Map<Integer, List<Student>> sutdenMap = new HashMap<Integer, List<Student>>();
- //初始化操作数据
- static {
- List<Student> stuList = null;
- Student stu;
- for (int i = 0; i < 10; i++) {
- stuList = new ArrayList<Student>();
- for (int j = 0; j < 2; j++) {
- stu = new Student(j, "zld_" + i + "." + j, i);
- stuList.add(stu);
- }
- sutdenMap.put(i, stuList);
- }
- }
- public static class Student {
- private int id;
- private String name;
- private int classID;
- public Student(int id, String name, int classID) {
- this.id = id;
- this.name = name;
- this.classID = classID;
- }
- public String toString() {
- return Student.class.getName() + "(id:" + this.id + ",name:"
- + this.name + ")";
- }
- }
- /**
- * @filename: SearchTask
- * @description: 查询任务
- * @author lida
- * @date 2013-4-1 下午3:02:29
- */
- public static class SearchTask implements Callable<List<Student>> {
- 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<Student> call() throws Exception {
- //模拟操作所用的时间数(毫秒)
- Thread.sleep(sleepTime);
- List<Student> stuList = sutdenMap.get(classID);
- return stuList;
- }
- }
- public static void main(String[] args) {
- FutureTest ft = new FutureTest();
- ExecutorService exec = Executors.newCachedThreadPool();
- List<SearchTask> searchTasks = new ArrayList<SearchTask>();
- SearchTask st;
- for (int i = 0; i < 10; i++) {
- st = new SearchTask(i, 2001);//指定2001 毫米为最大执行时间
- searchTasks.add(st);
- }
- try {
- //要求认为在2000毫秒内返回结果,否则取消执行。
- List<Future<List<Student>>> futures = exec.invokeAll(searchTasks,
- 2000, TimeUnit.MILLISECONDS);//invokeAll 第一个参数是任务列表;第二个参数是过期时间;第三个是过期时间单位
- for (Future<List<Student>> future : futures) {
- List<Student> students = future.get();
- for (Student student : students) {
- System.out.println(student.toString());
- }
- }
- exec.shutdown();
- } catch (InterruptedException e) {
- e.printStackTrace();
- Thread.interrupted();
- } catch (ExecutionException e) {
- e.printStackTrace();
- }
- }
- }
- http://zld406504302.iteye.com/blog/1840091
ExecutorService invokeAll 实例(转)的更多相关文章
- ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析
ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主 ...
- Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 普通情况下,我们使用Runnable作为主要的任务表示形式,可是R ...
- Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll(转)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是R ...
- java并发编程框架 Executor ExecutorService invokeall
首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ...
- 并发编程-concurrent指南-线程池ExecutorService的实例
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- Java多线程学习笔记(二)——Executor,Executors,ExecutorService比较
Executor:是Java线程池的超级接口:提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService. Executors:是java.u ...
- java高级---->Thread之ExecutorService的使用
今天我们通过实例来学习一下ExecutorService的用法.我徒然学会了抗拒热闹,却还来不及透悟真正的冷清. ExecutorService的简单实例 一.ExecutorService的简单使用 ...
- Executor(一)ExecutorService 线程池
Executor(一)ExecutorService 线程池 本篇主要涉及到的是 java.util.concurrent 包中的 ExecutorService.ExecutorService 就是 ...
- cocurrent包ExecutorService线程池
16. 执行器服务 ExecutorService java.util.concurrent.ExecutorService 接口表示一个异步执行机制,使我们能够在后台执行任务.因此一个 Execut ...
随机推荐
- Shiro学习笔记(5)——web集成
Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在 ...
- OGG-01008 Extract displays Discarding bad record (discard recs=1) when using filter or where clause
因为在extract參数文件里使用了where语句,而where后面的的条件列又不是主键,没有为update.delete操作记录日志,因此会报1008错误. Applies to: Oracle G ...
- 设计模式——辛格尔顿(Singleton)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 单例模式属于设计模式 ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10161 Accepted: 2810 D ...
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释(转)
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- 使用邮件发送执行时间久的SQL语句
ALTER proc [dbo].[usp_EmailLongRunningSQL] as begin declare@LongRunningQueries AS TABLE ( lrqId int ...
- Xcode 5.1.1 与 Xcode 6.0.1 共存
Xcode 5.1.1 (下面简称Xcode5)和Xcode 6.0.1(下面简称Xcode6)都是正式版本号.其应用程序文件名称都是"Xcode".假设通过AppStore升级或 ...
- Java 的布局管理器GridBagLayout的使用方法(转)
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...
- hdu1711 Number Sequence
Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ...