起
在之前说过,线程池ThreadPoolExecutor可以调用submit方法来获取返回值Future。像下面这样:
这里先定义三个Callable,之后都用这三个:
Callable callable1 = new Callable() {
@Override
public String call() throws Exception {
Thread.sleep(5000);
return "我是call1的返回值";
}
};
Callable callable2 = new Callable() {
@Override
public String call() throws Exception {
Thread.sleep(3000);
return "我是call2的返回值";
}
};
Callable callable3 = new Callable() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "我是call3的返回值";
}
};
直接使用ThreadPoolExecutor的submit获取结果的使用方法是这样的:
//声明一个线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
//提交三个任务
Future future1 = executor.submit(callable1);
Future future2 = executor.submit(callable2);
Future future2 = executor.submit(callable2);
//开始获取返回值
System.out.println("两个任务提交完毕,开始获取结果 "+getStringDate());
System.out.println(future1.get()+" "+getStringDate());
System.out.println(future2.get()+" "+getStringDate());
System.out.println(future3.get()+" "+getStringDate