轉載請註明出處 http://www.paraller.com
原文排版地址 點擊跳轉-任務執行/)緩存
任務執行
來構造的,經過將任務分紅小的工做單元
,提供一種天然的事務邊界
來優化錯誤恢復過程.獨立性
和明確的任務執行策略
無限制建立線程的不足併發
內存
;可運行的線程數量多於CPU的數量將會形成閒置,佔用內存,大量線程還會引發競爭Thread構造函數指定的棧大小
,以及系統對線程的限制都會形成崩潰。Note:
32位的機器,限制因素主要是線程棧的地址空間,每一個線程維護兩個執行棧,一個用於Java代碼,一個用於原生代碼,一般JVM會默認建立一個複合棧,大概是0.5兆(經過 -Xss或者Thread構造函數來設置),2的32次方除以棧大小,會將線程限制在幾萬內。異步
工做單元
, 而線程
則是任務異步執行的機制
Runnable
表示任務interface Executor{ void execute(Runnable command); }
class Demo{ private final Executor exec = Executors.newFixedThreadPool(100); void test(){ // 運行 Runnable task = new Runnable(){ public void run(){ //... } } // 提交 exec.execute(task); } }
經過管理一組工做線程的資源池,可以減小建立和銷燬的開銷(資源層面),而且不須要等待,提升響應性
Executor靜態工廠方法提供如下幾種資源池:函數
Executor實現一般建立線程執行,JVM只有在全部的非守護線程結束才能關閉,
類庫提供了 基於 Executor的 ExecutorService接口性能
不接受新任務
,等待開始的任務結束還沒有開始
(多是已接受的新任務)執行的任務。interface ExecutorService extends Executor{ void shutdown(); List<Runnable> shutdownNow(); boolean isShutdown(); ...// }
生命週期三種狀態 運行、關閉、已終止優化
RejectExecutionException
Timer負責管理 延遲任務 和 週期任務;缺陷以下:線程
若是要構建本身的調度器,能夠使用DelayQueue和ScheduledThreadPoolExecutor組合。code
class Demo{ final ExecutorService executor; void test(){ CompletionService cs = new ExecutorCompletionService(executor); for(...){ cs.submit(new Callable(){ //... }); } for(...){ // 返回的都是已經計算好結果的Callable Future<T> future = cs.take(); future.get(); } } }