Java8函数式编程入门 互动版

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

异步执行任务

通过CompletableFuture提供的进一步封装,很容易实现Future模式的异步调用。

例子,异步计算100的3次方。

CompletableFuture.supplyAsync()方法构造一个CompletableFuture实例,在supplyAsync()方法中,会在一个新的线程中执行传入的参数。supplyAsync()会立即返回,返回的CompletableFuture对象实例就可以作为这次调用的契约,在将来任何场合用户获取最终结果。

private void test() {
    final CompletableFuture<Integer> future =
            CompletableFuture.supplyAsync(()->calculate(100));
    try {
        //如果当前计算为完成,调用get()的线程就会等待
        System.out.println(future.get());
    }catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("exit");
}

private int calculate(int x) {
    int res = 0;
    try {
        Thread.sleep(1000);
        res = x * x * x;
    }catch (InterruptedException ie) {
        ie.printStackTrace();
    }
    return res;
}

输出结果:

query

用CompletableFuture异步计算随机生成100个1~100的随机数并求和。