ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# whenComplete ``` CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { int i = 10/ 0; return i; }, executor).whenComplete((res, excption) -> { // 可以得到异常, 当时没法修改返回数据 }).exceptionally(throwable -> { // 可以得到异常, 同时返回默认值 return 666; }); ``` # handle ``` CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> { return i; }, executor).handle((res, excption) -> { // 可以得到异常, 当时没法修改返回数据 if(res != null) { // 没有错误,直接返回 return res * 10; } if (excption!= null) { // 有错误,直接返回 0 return 0; } return 0; }); ``` # 线程串行化方法 带 async 结尾的, 表示另起一个线程, 这些都要前一个任务执行完成 // 会使用上一步的执行结果, 而且有返回值, 可以让下一步得到这一步返回结果 thenApply thenApplyAsync // 会使用上一步的执行结果, 但是自己没有返回值,无法让下一步得到这一步返回结果 thenAccept thenAcceptAsync // 不使用上一步的返回结果, 自己也没有返回值,无法让下一步得到这一步返回结果 thenRun thenRunAsync # 两任务都要完成 thenCombine # 两任务任意完成一个 applyToEither:两个任务有一个执行完成,获取它的返回值,处理任务并有新的返回值。 acceptlither:两个任务有一个执行完成,获取它的返回值,处理任务,没有新的返回值。 runAfterEither:两个任务有一个执行完成,不需要获取future的结果,处理任务,也没有返回值。