CompletableFuture详解~设置任务结果
生活随笔
收集整理的這篇文章主要介紹了
CompletableFuture详解~设置任务结果
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
CompletableFuture 提供以下方法,可以主動(dòng)設(shè)置任務(wù)結(jié)果。
boolean complete(T value) boolean completeExceptionally(Throwable ex)第一個(gè)方法,主動(dòng)設(shè)置 CompletableFuture 任務(wù)執(zhí)行結(jié)果,若返回 true,表示設(shè)置成功。如果返回 false,設(shè)置失敗,這是因?yàn)槿蝿?wù)已經(jīng)執(zhí)行結(jié)束,已經(jīng)有了執(zhí)行結(jié)果。
示例代碼如下:
// 執(zhí)行異步任務(wù) CompletableFuture cf = CompletableFuture.supplyAsync(() -> {System.out.println("cf 任務(wù)執(zhí)行開(kāi)始");sleep(10, TimeUnit.SECONDS);System.out.println("cf 任務(wù)執(zhí)行結(jié)束");return "樓下小黑哥"; });// Executors.newSingleThreadScheduledExecutor().execute(() -> {sleep(5, TimeUnit.SECONDS);System.out.println("主動(dòng)設(shè)置 cf 任務(wù)結(jié)果");// 設(shè)置任務(wù)結(jié)果,由于 cf 任務(wù)未執(zhí)行結(jié)束,結(jié)果返回 truecf.complete("程序通事"); });// 由于 cf 未執(zhí)行結(jié)束,將會(huì)被阻塞。5 秒后,另外一個(gè)線程主動(dòng)設(shè)置任務(wù)結(jié)果 System.out.println("get:" + cf.get());// 等待 cf 任務(wù)執(zhí)行結(jié)束 sleep(10, TimeUnit.SECONDS);// 由于已經(jīng)設(shè)置任務(wù)結(jié)果,cf 執(zhí)行結(jié)束任務(wù)結(jié)果將會(huì)被拋棄 System.out.println("get:" + cf.get()); /**** cf 任務(wù)執(zhí)行開(kāi)始* 主動(dòng)設(shè)置 cf 任務(wù)結(jié)果* get:程序通事* cf 任務(wù)執(zhí)行結(jié)束* get:程序通事 */這里需要注意一點(diǎn),一旦?complete?設(shè)置成功,CompletableFuture?返回結(jié)果就不會(huì)被更改,即使后續(xù)?CompletableFuture?任務(wù)執(zhí)行結(jié)束。
第二個(gè)方法,給?CompletableFuture?設(shè)置異常對(duì)象。若設(shè)置成功,如果調(diào)用?get?等方法獲取結(jié)果,將會(huì)拋錯(cuò)。
示例代碼如下:
// 執(zhí)行異步任務(wù) CompletableFuture cf = CompletableFuture.supplyAsync(() -> {System.out.println("cf 任務(wù)執(zhí)行開(kāi)始");sleep(10, TimeUnit.SECONDS);System.out.println("cf 任務(wù)執(zhí)行結(jié)束");return "樓下小黑哥"; }); // Executors.newSingleThreadScheduledExecutor().execute(() -> {sleep(5, TimeUnit.SECONDS);System.out.println("主動(dòng)設(shè)置 cf 異常");// 設(shè)置任務(wù)結(jié)果,由于 cf 任務(wù)未執(zhí)行結(jié)束,結(jié)果返回 truecf.completeExceptionally(new RuntimeException("啊,掛了")); }); // 由于 cf 未執(zhí)行結(jié)束,前 5 秒將會(huì)被阻塞。后續(xù)程序拋出異常,結(jié)束 System.out.println("get:" + cf.get()); /**** cf 任務(wù)執(zhí)行開(kāi)始* 主動(dòng)設(shè)置 cf 異常* java.util.concurrent.ExecutionException: java.lang.RuntimeException: 啊,掛了* ......*/總結(jié)
以上是生活随笔為你收集整理的CompletableFuture详解~设置任务结果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Dom4j完整教程~Document对象
- 下一篇: VS 编写 x64 内联汇编