Java8函数式编程入门 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

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);
}

输出结果:

query

用CompletableFuture计算随机生成10w个0~100之间的整数,并打印其和。