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());
    }
    }
    }
  • 相关阅读:
    史上最完整的Android开发工具集合(转)
    史上最完整的Android开发工具集合(转)
    JSP取得绝对路径
    ExecutorService 的理解与使用
    JAVA多线程实现的三种方式 ()
    高并发策略实例分析
    spring framework体系结构及内部各模块jar之间的maven依赖关系
    js 去掉下划线,后首个字母变大写
    Cron表达式
    eclipse中怎么找项目部署的路径和找编译后的class路径
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7979737.html
Copyright © 2011-2022 走看看