博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExecutorService invokeAll 实例(转)
阅读量:6173 次
发布时间:2019-06-21

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

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

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

转载地址:http://glmba.baihongyu.com/

你可能感兴趣的文章
使用aliyun镜像源下载镜像及仓库搭建
查看>>
Eric,基于多搜索引擎的自动问答机器人
查看>>
Logstash6.1 手动安装插件
查看>>
这个开场… 太吊胃口了…
查看>>
C#-老生常谈的 值类型与引用类型
查看>>
人工智能GPU/FPGA/ASIC/类脑芯片优势分析
查看>>
linux中断线程化分析【转】
查看>>
Java 基础【05】你的多继承纳?
查看>>
QTP的那些事--操作excel的方法总结(可用)
查看>>
VC++线程通信
查看>>
bat薪酬
查看>>
ORACLE SQL:经典查询练手第一篇
查看>>
SQL Server高可用性(High Availability)——Log Shipping
查看>>
Java中HashMap案例
查看>>
ICE专题:网络服务平台比较
查看>>
Dsicuz x2.5、X3、X3.2如何去掉域名后面的/forum.php
查看>>
java.util.zip.DataFormatException: invalid distance too far back
查看>>
iml文件
查看>>
[汇编] 2数相加极简单版
查看>>
oracle登录错误:ORA-28000: the account is locked 解决方法
查看>>