Java java.util.concurrent.Future的一个例子

简介: Java java.util.concurrent.Future的一个例子
package callableTest;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class CallableIndicator{
  private String name;
  private Double result;
  static public final int TIME = 3000;
  public CallableIndicator(String name, Double result){
    this.name = name;
    this.result = result;
  }
  public Double getResult(){
    return this.result;
  }
  public String getName(){
    return this.name;
  }
}
public class CallableTest {
   private static final int POOL_SIZE = 2;
      static class CalcThread implements Callable<CallableIndicator> {
        private String name;
          private List<Double> dataList = new ArrayList<>();
          public CalcThread(String name) {
              for(int i = 0; i < 10000; ++i) {
                  dataList.add(Math.random());
              }
              this.name = name;
              System.out.println("In CalcThread constructor, thread id: " + 
              Thread.currentThread().getId());
          }
          @Override
          public CallableIndicator call() throws Exception {
              double total = 0;
              for(Double d : dataList) {
                  total += d;
              }
              System.out.println("In CalcThread @Override call(), thread id: " + 
                    Thread.currentThread().getId());
              Thread.sleep(CallableIndicator.TIME);
              return new CallableIndicator(this.name, total / dataList.size());
          }
      }
      public static void printThread(){
        System.out.println("In main Thread? " + Thread.currentThread().getId());
      }
      public static void main(String[] args) {
        long start = System.currentTimeMillis();
          List<Future<CallableIndicator>> fList = new ArrayList<>();
          ExecutorService es = Executors.newFixedThreadPool(POOL_SIZE);
          printThread();
          System.out.println("Ready to submit new thread...");
          for(int i = 0; i < POOL_SIZE; ++i) {
              fList.add(es.submit(new CalcThread("Jerry Thread: " + i)));
          }
          for(Future<CallableIndicator> f : fList) {
              try {
                /*
                 * 注意这个get是异步操作:The result can only be retrieved using method get when the computation has completed, blocking if necessary until it is ready. 
                 */
                  System.out.println("Thread name: " + f.get().getName() + " result: " +  f.get().getResult());
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          long end = System.currentTimeMillis();
          System.out.println("duration: " + ( end - start));
          es.shutdown();
      }
}


相关文章
|
Java
【Java多线程】写一个死锁的例子
【Java多线程】写一个死锁的例子
85 0
|
Java
一个小例子体会Java反射的动态性
一个小例子体会Java反射的动态性
84 0
|
安全 Java API
Java日期与时间API(详解全部新与旧API,含代码例子)
在时间工具类里面重点学习这两个就差不多了LocalDateTime(全部)和DateTimeFormatter(转化格式)
129 0
|
Java
Java接口概念和语法例子(功能性方法)
比如有三个类。兔子、狗、青蛙这三个类。要定义一个公共游泳方法出来。但是兔子不会这个游泳,那么就不使用这个接口,另外的狗和青蛙会游泳,就会使用这个游泳接口。简单来说,就是谁需要功能接口谁就使用这个功能接口就好了
89 0
|
Java
Java内部类大全(含代码例子)
写在一个类里面的类就叫内部类
79 0
|
Java
Java常用API---Runtime(消息机制)含代码例子
私有化构造方法,不能被实例化
140 0
Java常用API---Runtime(消息机制)含代码例子
|
Java
java构造方法详解(构造器)附代码例子
构造器就是在创建对象的时候给成员变量进行初始化赋值的。
194 0
|
Java
java中的this关键字的应用场景(含代码例子)
为什么要用this关键字? 答案:可以解决成员变量和局部变量重名不知道调用谁的问题
90 0
|
Java
java中的类和对象通俗讲解(含有代码例子)
类和对象的关系:类(女生)就是一个简单模板,谁要用谁就调用。你调用了类,那你就变成了对象(女朋友)了哦,那你可要好好对这个类进行完善以成为你想要的。
76 0
|
Java
Java运算符讲解附例子说明(大全)
Java运算符分为六大:算术运算符、赋值运算符、比较运算符、逻辑运算符、条件(三目)运算符、位运算符
75 0
Java运算符讲解附例子说明(大全)