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. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面

    说明:这里是平局:晓风残月前辈的博客.他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  2. hdu1561(树形背包)

    给定n,m表示n个城堡,我们可以选择攻占m个城堡.要使得价值最大 接下来n行 a b,   第i行的a b,表示攻占第i个城堡的价值为b,但需要先攻占第a个城堡 如果有多个a=0的点,那么就不是一棵树 ...

  3. Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask

    原文:Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask 启动器与选择器简单的地方在于,它们的使用方法几乎一模一样,从前面几节中,我相 ...

  4. uip UDPclient模式通信移植,当地port随机

    现在移植UDPclient模式,测试广播地址. //udp_client.c /************************************************************ ...

  5. Maven和Gradle

    Maven和Gradle对比 Java世界中主要有三大构建工具:Ant.Maven和Gradle.经过几年的发展,Ant几乎销声匿迹.Maven也日薄西山,而Gradle的发展则如日中天.笔者有幸见证 ...

  6. [Windows Phone] 地图覆叠层控制项(MapOverlay )

    原文:[Windows Phone] 地图覆叠层控制项(MapOverlay ) 前言 当使用地图时,我们可能需要定位一些座标图示或是绘制一些文字线条,这时可以在地图上加上覆叠层进行绘制,在 Wind ...

  7. 升级 树莓派的gcc/g++编译器到4.8

    首先,更新你的树莓派(避免编译出来版本不对导致不能insert)sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade s ...

  8. memcache 集群

    memcache 是一个分布式的缓存系统,但是本身没有提供集群功能,在大型应用的情况下容易成为瓶颈.但是客户端这个时候可以自由扩展,分两阶段实现.第一阶段:key 要先根据一定的算法映射到一台memc ...

  9. iOS 8 新特性

    这篇文章会介绍iOS8开发相关的主要特性. App 插件 通过支持插件,iOS8让我们可以系统指定的区域进行扩展,也就是为用户的特定需求提供自定义的方法.例如:可以通过App插件帮助用户分享他们的内容 ...

  10. CentOS7.0 安装JAVA周围环境

    CentOS7.0 安装JAVA周围环境  安装JDK 1.配置JDK环境变量 把下载好的JDK(jdk-7u75-linux-x64.gz)文件上传到 Reg: /home/p2pweb/java/ ...