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