/**
* Future 未来的执行结果
*/
public class T06_Future {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 未来任务, 既是Runnable 也是 Future
FutureTask<Integer> task = new FutureTask<>(() -> {
TimeUnit.MILLISECONDS.sleep(500);
return 100;
});
new Thread(task).start();
System.out.println(task.get()); // 阻塞等待任务执行完成, 获取到返回值
System.out.println("-------------------------------");
//********************************
// 使用ExecutorService的submit替代FutureTask
ExecutorService service = Executors.newFixedThreadPool(5);
Future<Integer> result = service.submit(() -> {
TimeUnit.MILLISECONDS.sleep(500);
return 1;
});
System.out.println(result.isDone()); // false 执行未完毕
System.out.println(result.get()); // 1
System.out.println(result.isDone()); // true 执行已完毕
System.out.println(result.get()); // 一直等待
System.out.println(service.shutdownNow()); // 立即等待
}
}