zoukankan      html  css  js  c++  java
  • java 多线程 day10 获取线程的返回值 CallableAndFuture


    import java.util.Random;
    import java.util.concurrent.*;

    /**
    * Created by chengtao on 17/12/4.
    *
    * 获取线程的结果
    * <T> Future<T> submit(Callable<T> task);
    */
    public class Thread1001_CallableAndFuture {
    public static void main(String[] args)throws Exception {
    // future01();
    // future02();
    future03();
    System.out.println("主线程 已经执行完了");
    }

    public static void future01() throws Exception{
    ExecutorService threadPool = Executors.newFixedThreadPool(5);
    Future<String> future =
    threadPool.submit(
    new Callable<String>() {
    public String call() throws Exception {
    Thread.sleep(2000);
    return "hello";
    };
    }
    );
    System.out.println("等待结果");
    System.out.println("拿到结果:" + future.get());
    }

    //设置 返回任务的时间
    public static void future02() throws Exception{
    ExecutorService threadPool = Executors.newSingleThreadExecutor();
    Future<Integer> future =
    threadPool.submit(
    new Callable<Integer>() {
    public Integer call() throws Exception {
    Thread.sleep(2000);
    return 5;
    };
    }
    );
    System.out.println("等待结果");
    System.out.println("拿到结果:" + future.get(1, TimeUnit.SECONDS));
    }

    //一次提交多个任务,哪个任务先执行完,就先返回哪个任务的结果
    public static void future03() throws Exception{

    ExecutorService threadPool2 = Executors.newFixedThreadPool(10);
    CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool2);
    for(int i=1;i<=10;i++){
    final int seq = i;
    completionService.submit(new Callable<Integer>() {
    public Integer call() throws Exception {
    int sleepNum = new Random().nextInt(5000);
    System.out.println("seq = " + seq + " sleep = " + sleepNum );
    Thread.sleep(sleepNum);
    return seq;
    }
    });
    }
    for(int i=0;i<10;i++){
    System.out.println( completionService.take().get());
    }
    }
    }
  • 相关阅读:
    云之家技术文档下载
    原始MAC地址
    如何创建数据中心
    获取金蝶云试用许可
    【分享】工作流支持邮件提醒相关配置
    调试K3网页版需要注意的问题
    excel2010冻结行列
    Delphi 泛型 接口约束的实例 转
    delphi 各新版本特性收集
    Delphi XE Refactor重构功能简单说明 转
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7979737.html
Copyright © 2011-2022 走看看