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());
    }
    }
    }
  • 相关阅读:
    => 运算符
    ASP.NET与Javascript中获取URL信息
    ASP.NET中存取图片到数据库的示例
    在C#中利用DirectX实现声音播放
    使用VS2005 DataSet设计器实现数据访问层
    用C#播放声音文件
    VB.NET中声音的播放
    用C#播放声音文件
    声音播放解决方案(C#)
    Asp.Net音频文件上传和播放
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7979737.html
Copyright © 2011-2022 走看看