執行緒優化-使用執行緒池ThreadPoolExecutor
阿新 • • 發佈:2019-01-11
我們在進行非同步處理時,一般做法是new Thread(),但會存在以下問題:
過多的執行緒不方便統一管理
大量執行緒佔用系統資源
每次建立執行緒影響效能
採用執行緒池能夠控制執行緒併發數
實現單執行緒順序執行
重複使用執行緒池中的執行緒
ThreadPoolExecutor是執行緒池的實現類
類內部用一個佇列管理任務
通過Executor框架的工具類Executors,可以建立3鍾型別的ThreadPoolExecutor
-FiexedThreadPool
-SinlgeThreadExecutor
-CachedThreadPool
下面對3中執行緒池進行詳細說明:
FixThreadPool
被稱為可重用固定執行緒數的執行緒池
適用於為了滿足資源管理的需求,而需要限制當前執行緒數量的應用場景
1當前執行的執行緒數少於設定執行緒數,則建立新執行緒
2當前執行執行緒數等於設定執行緒數,任務將加入LinkBlockingQueue
3執行緒執行完任務後,會從LinkBlockingQueue獲取等待的任務來執行
SinlgeThreadExecutor
是使用單個執行緒
適用於保證順序執行各個任務,並且在任意時間點不會有多個執行緒活動的應用場景
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(); for (int i = 0; i < 10; i++) { final int index = i; singleThreadExecutor.execute(new Runnable() { @Override public void run() { try { System.out.println(index); Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }
CacheThreadPool
是一個根據需要建立新執行緒的執行緒池
當主執行緒提交任務速度高於CacheThreadPool中執行緒處理任務速度時,會不斷建立新執行緒。極端情況下,CacheThreadPool會因為創景過多執行緒而耗盡CPU和記憶體資源。