CompletableFuture 是一个能够表示异步计算结果的类。它可以用于异步编程,并且支持计算结果的组合和处理。
主要方法如下:
- runAsync/supplyAsync:异步运行给定的 Runnable/Supplier
- thenApply:当计算完成后,将当前 CompletableFuture 的结果应用到给定的 Function 函数
- thenAccept:当计算完成后,使用给定的 Consumer 消费当前 CompletableFuture 的结果
- thenRun:当计算完成后,运行给定的 Runnable
- thenCombine:当两个 CompletableFuture 都完成后,将结果合并到给定的 BiFunction 函数中
- handle:当 CompletableFuture 完成后,将结果或异常处理到给定的 BiConsumer 函数中
- exceptionally:如果 CompletableFuture 完成时引起异常,则使用给定的 Function 计算异常结果
- get():等待 CompletableFuture 完成并返回结果,或抛出异常
我们来看一些示例:
- runAsync – 异步执行无返回结果的任务
CompletableFuture.runAsync(() -> {
doSomething();
});
- supplyAsync – 异步执行有返回结果的任务
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return doSomething();
});
- thenApply – 消费 future 的结果并返回新的 future
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
return "Hello";
});
CompletableFuture<String> newFuture = future.thenApply(s -> s + " World");
- thenAccept – 消费 future 的结果但不返回新结果
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
return "Hello";
}).thenAccept(s -> {
System.out.println(s);
});
- thenCombine – 合并两个 future 的结果
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
return "Hello";
});
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
return "World";
});
CompletableFuture<String> combined = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);
所以,通过 CompletableFuture,我们可以用一种简单而优雅的方式实现异步编程,并得到异步结果的处理、合并等功能。