import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 1);
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "abc");
CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (integer, string) -> integer + string);
String result = combinedFuture.get();
System.out.println(result);
}
}
thenCombine
方法参数含义
- 第一个参数是另一个
CompletableFuture
,这里是future2
,它代表另一个异步任务。
- 第二个参数是一个
BiFunction
,在这里是(integer, string) -> integer + string
,这个BiFunction
接收两个异步任务的结果作为参数(第一个异步任务的结果integer
,第二个异步任务的结果string
),并返回组合后的结果。
thenCombine
方法执行原理
future1
和future2
这两个异步任务并行执行。
- 当
future1
和future2
都完成时,thenCombine
方法会被触发。
thenCombine
方法将future1
和future2
的结果作为参数传递给BiFunction
,BiFunction
对这两个结果进行处理并返回一个新的结果。
- 这个新的结果会被包装成一个新的
CompletableFuture
(即combinedFuture
),如果需要获取这个最终结果,可以调用get
方法。如果其中任何一个CompletableFuture
执行失败,combinedFuture
也会以失败状态完成。