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