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 ...
随机推荐
- iOS设备定位
一.iOS谈到定位 1.SignInSignOutViewController.h @interface SignInSignOutViewController : UIViewController& ...
- Git使用操作指南和GitHub
本文记录Git的使用操作,把散落的记忆整理到一起.并介绍GitHub的使用. 使用Git代表着一种思想和境地,和SVN相比,不是技术上的差异有多么大,而是代表融入了一种新的生态环境.一种开放开源的心态 ...
- 【Android进阶】Gson解析json字符串的简单应用
在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...
- adapter pattern
对象适配器 9.7 适配器模式总结 适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用,它是一种使用频率非常高的设计模式,在软件开发中得以广泛应用,在Spring等开源框架.驱动程序设 ...
- linux下"="号与"=="号
<鸟哥的linux私房菜>基础学习篇P382中说,在bash中"="与"=="是同样的,都代表推断是否相等,仅仅只是因为其它语言一般写法使用&quo ...
- 【Java GUI】Java面板基础:JPanel
有两个面板,常见的面板(JPanel)和滚动面板(JScrollPane) Jpanel 面板是一种常见的容器,JPanel的作用是实现接口层次结构,面放入一些组件.也能够在上面绘画,将放有组件和有画 ...
- uploadify控制 上传图片到百度云存储
最近使用uploadify 控制图片上传到百度网盘....总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系.送存储在数据库中的链接.因此,我们 ...
- BibTex (.bib) 文件的凝视
1) 将某个參考文献所有去掉,能够去掉前面的『@』 样例 @article{##, author = {###}, title = {###}, journal = {###}, ...
- JDK5什么是新的堵塞队列线程(四)
一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当 ...
- LeetCode——ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...