10个班级,每个班级20名学生,在指定的时间内查询每个班级学生的集合。

    1. package cn.com.ld.study.thread;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. import java.util.HashMap;
    5. import java.util.List;
    6. import java.util.Map;
    7. import java.util.concurrent.Callable;
    8. import java.util.concurrent.ExecutionException;
    9. import java.util.concurrent.ExecutorService;
    10. import java.util.concurrent.Executors;
    11. import java.util.concurrent.Future;
    12. import java.util.concurrent.TimeUnit;
    13. public class FutureTest {
    14. //缓存操作数据集
    15. private static final Map<Integer, List<Student>> sutdenMap = new HashMap<Integer, List<Student>>();
    16. //初始化操作数据
    17. static {
    18. List<Student> stuList = null;
    19. Student stu;
    20. for (int i = 0; i < 10; i++) {
    21. stuList = new ArrayList<Student>();
    22. for (int j = 0; j < 2; j++) {
    23. stu = new Student(j, "zld_" + i + "." + j, i);
    24. stuList.add(stu);
    25. }
    26. sutdenMap.put(i, stuList);
    27. }
    28. }
    29. public static class Student {
    30. private int id;
    31. private String name;
    32. private int classID;
    33. public Student(int id, String name, int classID) {
    34. this.id = id;
    35. this.name = name;
    36. this.classID = classID;
    37. }
    38. public String toString() {
    39. return Student.class.getName() + "(id:" + this.id + ",name:"
    40. + this.name + ")";
    41. }
    42. }
    43. /**
    44. * @filename: SearchTask
    45. * @description: 查询任务
    46. * @author lida
    47. * @date 2013-4-1 下午3:02:29
    48. */
    49. public static class SearchTask implements Callable<List<Student>> {
    50. public final int classID;
    51. public long sleepTime;
    52. /**
    53. * <p>Title: </p>
    54. * <p>Description: </p>
    55. * @param classID  班级编号
    56. * @param sleepTime  模拟操作所用的时间数(毫秒)
    57. */
    58. SearchTask(int classID, long sleepTime) {
    59. this.classID = classID;
    60. this.sleepTime = sleepTime;
    61. }
    62. @Override
    63. public List<Student> call() throws Exception {
    64. //模拟操作所用的时间数(毫秒)
    65. Thread.sleep(sleepTime);
    66. List<Student> stuList = sutdenMap.get(classID);
    67. return stuList;
    68. }
    69. }
    70. public static void main(String[] args) {
    71. FutureTest ft = new FutureTest();
    72. ExecutorService exec = Executors.newCachedThreadPool();
    73. List<SearchTask> searchTasks = new ArrayList<SearchTask>();
    74. SearchTask st;
    75. for (int i = 0; i < 10; i++) {
    76. st = new SearchTask(i, 2001);//指定2001 毫米为最大执行时间
    77. searchTasks.add(st);
    78. }
    79. try {
    80. //要求认为在2000毫秒内返回结果,否则取消执行。
    81. List<Future<List<Student>>> futures = exec.invokeAll(searchTasks,
    82. 2000, TimeUnit.MILLISECONDS);//invokeAll 第一个参数是任务列表;第二个参数是过期时间;第三个是过期时间单位
    83. for (Future<List<Student>> future : futures) {
    84. List<Student> students = future.get();
    85. for (Student student : students) {
    86. System.out.println(student.toString());
    87. }
    88. }
    89. exec.shutdown();
    90. } catch (InterruptedException e) {
    91. e.printStackTrace();
    92. Thread.interrupted();
    93. } catch (ExecutionException e) {
    94. e.printStackTrace();
    95. }
    96. }
    97. }
    98. http://zld406504302.iteye.com/blog/1840091

ExecutorService invokeAll 实例(转)的更多相关文章

  1. ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析

    ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主 ...

  2. Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 普通情况下,我们使用Runnable作为主要的任务表示形式,可是R ...

  3. Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll(转)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是R ...

  4. java并发编程框架 Executor ExecutorService invokeall

    首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ...

  5. 并发编程-concurrent指南-线程池ExecutorService的实例

    1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...

  6. Java多线程学习笔记(二)——Executor,Executors,ExecutorService比较

    Executor:是Java线程池的超级接口:提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService. Executors:是java.u ...

  7. java高级---->Thread之ExecutorService的使用

    今天我们通过实例来学习一下ExecutorService的用法.我徒然学会了抗拒热闹,却还来不及透悟真正的冷清. ExecutorService的简单实例 一.ExecutorService的简单使用 ...

  8. Executor(一)ExecutorService 线程池

    Executor(一)ExecutorService 线程池 本篇主要涉及到的是 java.util.concurrent 包中的 ExecutorService.ExecutorService 就是 ...

  9. cocurrent包ExecutorService线程池

    16. 执行器服务 ExecutorService java.util.concurrent.ExecutorService 接口表示一个异步执行机制,使我们能够在后台执行任务.因此一个 Execut ...

随机推荐

  1. iOS设备定位

    一.iOS谈到定位 1.SignInSignOutViewController.h @interface SignInSignOutViewController : UIViewController& ...

  2. Git使用操作指南和GitHub

    本文记录Git的使用操作,把散落的记忆整理到一起.并介绍GitHub的使用. 使用Git代表着一种思想和境地,和SVN相比,不是技术上的差异有多么大,而是代表融入了一种新的生态环境.一种开放开源的心态 ...

  3. 【Android进阶】Gson解析json字符串的简单应用

    在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式, ...

  4. adapter pattern

    对象适配器 9.7 适配器模式总结 适配器模式将现有接口转化为客户类所期望的接口,实现了对现有类的复用,它是一种使用频率非常高的设计模式,在软件开发中得以广泛应用,在Spring等开源框架.驱动程序设 ...

  5. linux下&quot;=&quot;号与&quot;==&quot;号

    <鸟哥的linux私房菜>基础学习篇P382中说,在bash中"="与"=="是同样的,都代表推断是否相等,仅仅只是因为其它语言一般写法使用&quo ...

  6. 【Java GUI】Java面板基础:JPanel

    有两个面板,常见的面板(JPanel)和滚动面板(JScrollPane) Jpanel 面板是一种常见的容器,JPanel的作用是实现接口层次结构,面放入一些组件.也能够在上面绘画,将放有组件和有画 ...

  7. uploadify控制 上传图片到百度云存储

    最近使用uploadify 控制图片上传到百度网盘....总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系.送存储在数据库中的链接.因此,我们 ...

  8. BibTex (.bib) 文件的凝视

    1) 将某个參考文献所有去掉,能够去掉前面的『@』 样例 @article{##,    author = {###},    title = {###},    journal = {###},   ...

  9. JDK5什么是新的堵塞队列线程(四)

    一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当 ...

  10. LeetCode——ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...