降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。
提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。
提高執行緒的可管理性。使用執行緒池可以進行統一分配、調優和監控。
判斷工作佇列是否已經滿。
判斷執行緒池的執行緒是否已滿。
總結:執行緒池的主要流程圖
如果當前執行的執行緒少於corepoolsize(預熱階段),則建立新執行緒來執行任務(注意,執行這一步驟需要獲取全域性鎖)。
如果執行的執行緒等於或多於corepoolsize,則將任務加入blockingqueue。
如果無法將任務加入blockingqueue(佇列已滿),則建立新的執行緒來處理任務(注意,執行這一步驟需要獲取全域性鎖)。
如果建立新執行緒將使當前執行的執行緒超出maximumpoolsize,任務將被拒絕,並呼叫rejectedexecutionhandler.rejectedexecution()方法。
工作執行緒:執行緒池建立執行緒時,會將執行緒封裝成工作執行緒worker,worker在執行完任務後,還會迴圈獲取工作佇列裡的任務來執行。
執行緒池中線程執行任務的情況及示意圖
在execute()方法中建立乙個執行緒時,會讓這個執行緒執行當前任務。
這個執行緒執行完上圖中1的任務後,會反覆從blockingqueue獲取任務來執行。
threadpoolexecutor類的構造方法
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime, timeunit unit, blockingqueue
workqueue)
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime, timeunit unit, blockingqueue
workqueue, rejectedexecutionhandler handler)
引數
corepoolsize(執行緒池的基本大小):當提交乙個任務到執行緒池時,執行緒池會建立乙個執行緒來執行任務,即使其他空閒的基本執行緒能夠執行新任務也會建立執行緒,等到需要執行的任務數大於執行緒池基本大小時就不再建立。
runnabletaskqueue(任務佇列):用於儲存等待執行的任務的阻塞佇列。
maximumpoolsize(執行緒池最大數量):執行緒池允許建立的最大執行緒數。
threadfactory:用於設定建立執行緒的工廠,可以通過執行緒工廠給每個建立出來的執行緒設定更有意義的名字。
rejectedexecutionhandler(飽和策略):當佇列和執行緒池都滿了,說明執行緒池處於飽和狀態,那麼必須採取一種策略處理提交的新任務。
也可以根據應用場景需要來實現rejectedexecutionhandler介面自定義策略。
其他主要引數
keepalivetime(執行緒活動保持時間):執行緒池的工作執行緒空閒後,保持存活的時間。
timeunit(執行緒活動保持時間的單位):可選的單位有天(days)、小時(hours)、分鐘(minutes)、毫秒(milliseconds)、微秒(microseconds,千分之一毫秒)和納秒(nanoseconds,千分之一微秒)。
1.executor.execute(runnable command)
功能:用於提交不需要返回值的任務,所以無法判斷任務是否被執行緒池執行成功。
例項
threadspool.
execute
(new
runnable()});
2.executorservice.submit()
submit()方法語法
future
submit
(callable
task)
future
submit
(runnable task, t result)
future<
?>
submit
(runnable task)
功能:submit()方法用於提交需要返回值的任務。
示例**
future
future = executor.
submit
(harreturnvaluetask)
;try
catch
(interruptedexception e)
catch
(executionexception e)
finally
關閉執行緒池的方法:呼叫執行緒池(executorservice介面)的shutdown()或shutdownnow()。
原理:遍歷執行緒池中的工作執行緒,然後逐個呼叫執行緒的interrupt方法來中斷執行緒,所以無法響應中斷的任務可能永遠無法終止。
shutdown() & shutdownnow() 的區別
其他方法
boolean
isshutdown
():只要呼叫了這兩個關閉方法中的任意乙個,該方法就會返回true。
boolean
isterminated
():當所有的任務都已關閉後,才表示執行緒池關閉成功,這時該方法才會返回true。
java執行緒系列 java5中的執行緒池
public class threadpoolstest threadpools.shutdown 停掉執行緒池 定時器,隔10s後執行 executors.newscheduledthreadpool 3 schedule new runnable 10,timeunit.seconds 定時器,...
Java執行緒池
executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...
Java執行緒池
一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...