Java 在 java.util.concurrent 中有 Executor 套件,提供非常靈活的執行工具。可以等待一系列的任務集合中的任何任務 (invokeAny) 或是全部任務 (invokeAll) 完成。Executors 類有提供靜態工廠方法,可以控制執行緒池 (thread pool) 的設定。
如果是輕量級服務,通常使用 Executors.newCachedThreadPool 是不錯的選擇,不需要額外設定,被交付的任務沒有排隊,直接交給執行緒處理,若是沒有執行緒可用,就產生新執行緒來處理。如果是負載量大的伺服器,不斷地生成新執行緒,所有的 CPU 資源將被佔用,當越來越多的執行緒產生,只會讓情況更糟。大負載的伺服器應使用 Executors.newFixedThreadPool,它提供固定執行緒的執行緒池。
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(runnable);
exec.shutdown();
在 Executor 套件中,工作單元與執行機制是分開的,工作單元稱作任務 (task),任務有兩種:Runnable 及 Callable。在 Java 7 中,Executor 支援 fork-join 任務,fork-join 任務用 ForkJoinTask 來完成,並發的 stream 就是使用 fork join 池來編寫的。轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/04/effective-java-80-executor-task-stream.html
沒有留言:
張貼留言