1. 程式人生 > >執行緒優化-使用執行緒池ThreadPoolExecutor

執行緒優化-使用執行緒池ThreadPoolExecutor

我們在進行非同步處理時,一般做法是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和記憶體資源。