Java CompletableFuture线程执行完回调

CompletableFuture的主要功能就是适用于线程回调

1使用Future获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,这两种方法都不是很好,因为主线程也会被迫等待。

2.在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。

private static void completableFuture() {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            threadMethod(5, "-----1");
            return "第一线程";
        }, executorService);
        CompletableFuture<String> completableFuture2 = CompletableFuture.supplyAsync(() -> {
            threadMethod(2, "-----2");
            return "第二线程";
        }, executorService);
        executorService.shutdown();
        completableFuture.thenAcceptAsync((r) -> {
            System.out.println(r);
        });
        completableFuture2.thenAcceptAsync((r) -> {
            System.out.println(r);
        });
    }
private static void threadMethod(int num, String name) {
        for (int i = 0; i < num; i++) {
            mySleep(1000);
            System.out.println(String.format("%s", name));
        }
    }

    private static void mySleep(int millis) {
        try {
            Thread.sleep(millis);
        } catch (InterruptedException e) {

        }
    }
经验分享 程序员 微信小程序 职场和发展