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());
    }
    }
    }
  • 相关阅读:
    数据库常用面试题
    Base64、Md5、Des加密
    C#反射类型的使用
    C# 反射工厂模式的实现
    生成验证码的例子
    轻松实现页面提交时,显示“提交中..” (转)
    编写高性能 Web 应用程序的 10 个技巧 (转)
    由Duwamish学习web.config的配置(转)
    .Net配置文件常用配置说明 (转)
    用asp.net还原与恢复sqlserver数据库(转)
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7979737.html
Copyright © 2011-2022 走看看