- whenComplete方法执行情况:
whenComplete
方法会在CompletableFuture
完成(无论是正常完成还是异常完成)时执行。
- 举例说明:
import java.util.concurrent.CompletableFuture;
public class CompletableFutureExample {
public static void main(String[] args) {
CompletableFuture.supplyAsync(() -> {
// 模拟一些计算
if (Math.random() < 0.5) {
throw new RuntimeException("模拟异常");
}
return "任务正常完成";
}).whenComplete((result, ex) -> {
if (ex == null) {
System.out.println("任务正常完成,结果是: " + result);
} else {
System.out.println("任务异常完成,异常信息: " + ex.getMessage());
}
});
// 防止主线程退出
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- 执行时机和特点:
- 执行时机:在
CompletableFuture
代表的异步任务完成后,无论任务是正常返回结果还是抛出异常,whenComplete
方法都会被执行。在上述例子中,supplyAsync
方法创建了一个异步任务,当这个异步任务完成(不管是正常返回字符串还是抛出异常),whenComplete
中的代码就会执行。
- 特点:
- 不影响原任务执行:
whenComplete
方法只是在任务完成后进行额外的处理,不会阻塞原异步任务的执行,也不会改变原任务的返回结果或异常状态。
- 可以处理异常:通过
whenComplete
方法的第二个参数ex
,可以在任务异常完成时获取到异常信息,从而进行相应的处理。在上述例子中,根据ex
是否为null
来判断任务是否正常完成,并输出不同的信息。