CompletableFuture
CompletableFuture是Java8新增的一个超大型工具类,它实现了Future接口,CompletionStage接口。通过CompletionStage提供的接口,可以在一个执行结果上进行多次流式调用,以此得到最终结果。
CompletableFuture和Future一样,可以作为函数调用的契约。向CompletableFuture请求一个数据,如果数据还没有准备好,请求线程就会等待。
例子,用CompletableFuture输出一个整数的平方。
//接收CompletableFuture作为其构造函数
//计算CompletableFuture表示的整数的平方并打印。
class TaskRun implements Runnable {
CompletableFuture<Integer> cf = null;
public TaskRun(CompletableFuture<Integer> cf) {
this.cf = cf;
}
@Override
public void run() {
int tmp = 0;
try {
tmp = cf.get() * cf.get();
}catch (Exception e) {
e.printStackTrace();
}
System.out.println(tmp);
}
}
创建一个CompletableFuture对象实例,将这个对象实例传递给TaskRun。TaskRun在执行到tmp = cf.get() * cf.get()会阻塞,因为CompletableFuture中没有它所需要的数据,整个CompletableFuture处于未完成状态。
private void test() {
final CompletableFuture<Integer> future = new CompletableFuture<>();
new Thread(new TaskRun(future)).start();
try {
Thread.sleep(1000);
}catch (InterruptedException ie) {
ie.printStackTrace();
}
future.complete(100);
}
输出结果:
用CompletableFuture计算随机生成10w个0~100之间的整数,并打印其和。