JDK8-11-CompletableFuture(9)- handle 方法使用
下例中,有一个计算除法的方法 divisionOperation,在main 方法中有两次调用,第一次正常调用,第二次产生异常,
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class SupplyAsyncTest09 {
public static CompletableFuture<String> divisionOperation(int a, int b) {
return CompletableFuture.supplyAsync(() -> a / b).handle((result, ex) -> {
if (ex != null) {
ex.printStackTrace();
return null;
}
return "结果为:" + result;
});
}
public static void main(String[] args) {
CompletableFuture<String> result1 = divisionOperation(4, 2);
try {
System.out.println(result1.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
CompletableFuture<String> result2 = divisionOperation(4, 0);
try {
System.out.println(result2.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
运行结果:
handle
public <U> CompletableFuture<U> handle(
BiFunction<? super T, Throwable, ? extends U> fn) {
return uniHandleStage(null, fn);
}
BiFunction 方法中两个入参分别是 结果 和异常