Java 为并发编程提供了众多的工具,本文将重点介绍 Java8 中 CompletableFuture。
笔者在自己搜索资料及实践之后,避开已经存在的优秀文章的写作内容与思路,将以更加浅显的示例和语言,介绍 CompleatableFuture, 同时提供自己的思考。
本文最后会附上其他优秀的文章链接供读者进行更详细学习与理解。
1. 理解 Future
当处理一个任务时,总会遇到以下几个阶段:提交任务
执行任务
任务完成的后置处理
以下我们简单定义,构造及提交任务的线程为生产者线程; 执行任务的线程为消费者线程; 任务的后置处理线程为后置消费者线程。
根据任务的特性,会衍生各种各样的线程模型。其中包括 Future 模式。
接下来我们先用最简单的例子迅速对 Future 有个直观理解,然后再对其展开讨论。
例1.1
ExecutorService executor = Executors.newFixedThreadPool(3);
Future future = executor.submit(new Callable() {
@Override
public String call() throws Exception {
//do some thing Thread.sleep(100);
return "i am ok";
}
});
println(future.isDone());
println(future.get());
在本例中首先创建一个线程池,然后向