- 处理异步任务抛出的异常:
- 使用
exceptionally
方法来优雅处理异常。exceptionally
方法会在异步任务抛出异常时被调用,它接收一个Function
,这个Function
的参数是异常,返回值是当异常发生时要返回的替代结果。
- 示例代码如下:
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExceptionHandling {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
if (Math.random() > 0.5) {
throw new RuntimeException("模拟异常");
}
return "任务正常完成";
}).exceptionally(ex -> {
System.out.println("捕获到异常: " + ex.getMessage());
return "异常替代结果";
}).thenAccept(System.out::println);
}
}
- 使用自定义线程池执行
supplyAsync
方法中的任务:
- 首先创建一个
ExecutorService
线程池,然后将其作为参数传递给supplyAsync
方法。
- 示例代码如下:
import java.util.concurrent.*;
public class CompletableFutureCustomThreadPool {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
CompletableFuture.supplyAsync(() -> {
System.out.println("任务在自定义线程池中执行");
return "任务执行结果";
}, executor).thenAccept(System.out::println).whenComplete((result, ex) -> {
executor.shutdown();
});
}
}