ExecutorService 执行完Callable 任务后,返回 Future 对象,Future 对象表示一个任务的生命周期,包含任务的状态和任务的结果对象。
Future的get方法可以获得 Callable任务执行后的结果,isDone, isCanceled 方法判断线程状态。
使用也很简单,
public class CallableTest implements Callable<String> {
public static void main(String args[]) {
ExecutorService executor = Executors.newFixedThreadPool(20);
List<Future<String>> list = new ArrayList<Future<String>>();
Callable<String> callable = new CallableTest();
for (int i=0; i<100; i++) {
Future<String> future = executor.submit(callable);
list.add(future);
}
for (Future<String> future : list) {
try {
// Future.get() 方法会等待线程结束
System.out.println(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
// 结束线程池
executor.shutdown();
}
@Override
public String call() throws Exception {
TimeUnit.SECONDS.sleep(2);
return Thread.currentThread().getName();
}
}