非同步任務編排CompletableFuture
貼下非同步編排隨手寫的測試程式碼,僅用於記錄。
/**
* 非同步編排測試,多工編排時使用
* @author 86156
*/
public class AsynTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 1、非同步執行,沒有返回結果
CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(new Runnable01());
// 2、非同步執行,指定執行緒池執行,沒有返回結果
ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletableFuture<Void> completableFuture2 = CompletableFuture.runAsync(new Runnable01(), executorService);
// 3、非同步執行,獲取返回結果
FutureTask<String> futureTask = new FutureTask<>(new Callable01());
CompletableFuture<String> completableFuture3 = CompletableFuture.supplyAsync(() -> {
System.out.println("非同步執行任務,帶返回值");
return "success";
});
System.out.println(completableFuture3.get()); // success
// 4、非同步執行,指定執行緒池執行,獲取返回結果
CompletableFuture<String> completableFuture4 = CompletableFuture.supplyAsync(() -> {
System.out.println("非同步執行任務,指定執行緒池,帶返回值");
return "success";
});
System.out.println(completableFuture4.get()); // success
// 關閉執行緒池
executorService.shutdown();
// 任務完成時執行邏輯:whenCompleteAsync,異常處理exceptionally
CompletableFuture.supplyAsync(() -> {
System.out.println("非同步執行任務,執行完成繼續執行其他邏輯");
return "success";
}).whenCompleteAsync((result, exception) -> {
if (exception == null) {
int i = 10 / 0;
System.out.println("上一步執行任務結果是:" + result);
}
}).exceptionally(e -> {
System.out.println("列印異常" + e.getMessage());
return e.getMessage();
});
// 任務完成時執行邏輯:handle
CompletableFuture.supplyAsync(() -> {
System.out.println("非同步執行任務,,,");
return "hello";
}).handle((res, err) -> {
if (err == null) {
System.out.println(res + " Tom!");
}
return 0;
});
// 序列化執行任務:thenApply,thenRun,thenAccept
// CompletableFuture.supplyAsync(() -> {
// System.out.println("非同步執行任務,,,");
// return "hello";
// }).thenAccept(res -> System.out.println("執行完會沒有返回結果,列印執行結果:" + res));
// CompletableFuture.supplyAsync(() -> {
// System.out.println("非同步執行任務,,,");
// return "hello";
// }).thenApply(res -> {
// System.out.println("執行完會有返回結果,列印執行結果:" + res);
// return 0;
// });
// CompletableFuture.supplyAsync(() -> {
// System.out.println("非同步執行任務,,,");
// return "hello";
// }).thenRun(() -> {
// System.out.println("thenRun無法獲取上個任務的結果");
// });
// 兩個任務都要完成
completableFuture1.thenCombineAsync(completableFuture2, (f1, f2) -> {
System.out.println(f1 + ":" + f2 + "ret");
return 0;
});
// 兩個任務任何一個完成
completableFuture1.runAfterEitherAsync(completableFuture2, () -> {
System.out.println("任何一個任務執行成功都執行這裡。。。。。。。");
});
// 所有任何都要執行
CompletableFuture.allOf(completableFuture1, completableFuture2, completableFuture3).handle((res, err) ->
{
if (err == null) {
System.out.println("成功執行所有任務");
}
return 0;
}
);
// 任何一個任何執行
CompletableFuture.anyOf(completableFuture1, completableFuture2, completableFuture3).handle((res, err) ->
{
if (err == null) {
System.out.println("任何一個任何執行");
}
return 0;
}
);
}
public static class Runnable01 implements Runnable {
@Override
public void run() {
System.out.println("非同步執行執行緒,執行緒id:" + Thread.currentThread().getId());
}
}
public static class Callable01 implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("callable方式執行執行緒");
return "success";
}
}
}
相關文章
- Java8 CompletableFuture非同步任務Java非同步
- 用CompletableFuture實現非同步任務非同步
- Java CompletableFuture:allOf等待所有非同步執行緒任務結束Java非同步執行緒
- celery 與 flask 實現非同步任務排程Flask非同步
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- 如何在Java中實現非同步任務排程?Java非同步
- 任務排程
- 從 Turborepo 看 Monorepo 工具的任務編排能力Mono
- 同步任務與非同步任務執行順序非同步
- Agent 任務編排系統:從設計到落地
- CompleteFuture實現簡單的任務編排實踐
- xxl-job之實現流程任務編排思路
- Airflow 任務排程AI
- Laravel 任務排程Laravel
- OkHttpClient原始碼分析(一)—— 同步、非同步請求分析和Dispatcher的任務排程HTTPclient原始碼非同步
- 分散式任務排程分散式
- Spring 指南(排程任務)Spring
- SpringBoot與非同步任務、定時任務、郵件任務Spring Boot非同步
- servlet非同步任務Servlet非同步
- 非同步技巧之CompletableFuture非同步
- 如何視覺化編寫和編排你的 K8s 任務視覺化K8S
- js的setTimeout和Promise—同步非同步和微任務巨集任務JSPromise非同步
- laravel框架任務排程(定時執行任務)Laravel框架
- 詳解非同步任務 | 看 Serverless Task 如何解決任務排程&可觀測性中的問題非同步Server
- 聊聊PowerJob的任務排程
- 分散式排程任務-ElasticJob分散式AST
- Linux 定時任務排程Linux
- LeetCode 621 任務排程器LeetCode
- Timer和TimerTask 任務排程
- 終止非同步任務非同步
- Celery非同步任務框架非同步框架
- AsyncTask非同步任務類非同步
- 非同步程式設計 CompletableFuture非同步程式設計
- 淺析遊戲敘事結構和任務編排設計遊戲
- 使用 go-zero 優雅地實現併發編排任務Go
- Spark中資源排程和任務排程Spark
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- Python任務排程模組APSchedulerPython