1.runAsync、supplyAsync:用于异步执行任务。
// runAsync:没有返回值
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
System.out.println("Hello");
}, executor);
// supplyAsync:有返回值
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
System.out.println("Hello");
return "World";
}, executor);
// 异常为 Exception 必须 try 或 添加异常签名
// 可以设置超时时间
// 如果线程中断会结束阻塞,抛出异常
future2.get();
// 异常为 RuntimeException 不强制 try
// 不能设置超时时间
// 不能响应线程中断,继续等待
future2.join();
2.thenApply、thenAccept、thenRun:用于在前一个任务完成后执行后续操作。
// 待 future 返回后,下面的才会执行
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");
// thenApply:接收 future 的结果,返回一个新值
CompletableFuture<String> future2 = future.thenApply(s -> s + " World");
// thenAccept:接收 future 的结果,无返回值
CompletableFuture<Void> future3 = future.thenAccept(s -> System.out.println(s));
// thenRun:无参无返回值
CompletableFuture<Void> future4 = future.thenRun(() -> System.out.println("完成了"));
System.out.println(future.join());// Hello
System.out.println(future2.join());// Hello World
System.out.println(future3.join());// null
System.out.println(future4.join());// null
3.thenCombine、thenAcceptBoth、runAfterBoth:用于组合两个 CompletableFuture 的结果。
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "World");
CompletableFuture<String> combinedFuture = future1.thenCombine(future2, (s1, s2) -> s1 + " " + s2);
System.out.println(combinedFuture.join());// Hello World
4.applyToEither、acceptEither、runAfterEither:用于在两个 CompletableFuture 中任一完成时执行后续操作。
5.allOf、anyOf:用于等待多个 或 任意 CompletableFuture 的完成。
String[] arr = new String[2];
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> arr[0] = "Hello");
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> arr[1] = "World");
// allOf:等待所有 future 全部完成
CompletableFuture.allOf(future1, future2).join();
System.out.println(arr[0] + " " + arr[1]);// Hello World
6.exceptionally:用于处理异常情况。
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
return 1/0;
}).exceptionally(ex -> {
System.out.println("异常信息: " + ex.getMessage());// 异常信息: java.lang.ArithmeticException: / by zero
return 0;
});
System.out.println(future.join());// 0
7.handle:用于处理前一个任务的结果或异常。
8.whenComplete:用于在前一个任务完成后执行回调,无论成功还是失败。
标签:System,详解,CompletableFuture,使用,println,future,Hello,out
From: https://www.cnblogs.com/yfeil/p/18164411