public threadpoolexecutor(intcorepoolsize,intmaximumpoolsize,longkeepalivetime,timeunitunit,executors根據應用場景提供了常見的執行緒池:blockingqueueworkqueue);
public threadpoolexecutor(intcorepoolsize,intmaximumpoolsize,longkeepalivetime,timeunitunit,
blockingqueueworkqueue,threadfactorythreadfactory,rejectedexecutionhandlerhandler);
1.corepoolsize(執行緒池的基本大小)
當提交乙個任務到執行緒池時,執行緒池會建立乙個執行緒來執行任務,即使其他空閒的基本執行緒能夠執行新任務也會建立執行緒,直到達到執行緒池的基本大小
注:如果呼叫了執行緒池的prestartallcorethreads方法,執行緒池會提前建立並啟動所有基本執行緒
2.runnabletaskqueue(任務佇列)
用於儲存等待執行的任務的阻塞佇列。可以選擇以下幾個阻塞佇列。
3.maximumpoolsize(執行緒池最大大小)
執行緒池允許建立的最大執行緒數。如果佇列滿了,並且已建立的執行緒數小於最大執行緒數,則執行緒池會再建立新的執行緒執行任務。
注:值得注意的是如果使用了無界的任務佇列(沒指定大小的linkedblockingqueue)這個引數就沒什麼效果
4.threadfactory:用於設定建立執行緒的工廠
可以通過執行緒工廠給每個建立出來的執行緒設定更有意義的名字,debug和定位問題時非常又幫助。通過指定threadfactory引數,設定能代表具體業務的執行緒名稱方便通過日誌的執行緒名稱識別所屬業務
如spring提供的customizablethreadfactory
5.rejectedexecutionhandler(飽和策略)
當佇列和執行緒池都滿了,說明執行緒池處於飽和狀態,那麼必須採取一種策略處理提交的新任務。這個策略預設情況下是abortpolicy,表示無法處理新任務時丟擲異常。以下是jdk1.5提供的四種策略。
6.keepalivetime(執行緒活動保持時間)
注:如果任務很多,並且每個任務執行的時間比較短,可以調大這個時間,提高執行緒的利用率
7.timeunit(執行緒活動保持時間的單位)
可選的單位有天(days),小時(hours),分鐘(minutes),毫秒(milliseconds),微秒(microseconds, 千分之一毫秒)和毫微秒(nanoseconds, 千分之一微秒)
newfixedthreadpool(int nthreads):建立乙個定長線程池,可控制線程池最大併發數,超出的執行緒會在佇列中等待
newsinglethreadexecutor():建立乙個單執行緒化的執行緒池,只會用唯一的工作執行緒來執行任務,保證任務按照指定順序執行
newcachedthreadpool():用空閒執行緒執行task,沒有時直接建立執行緒,空閒執行緒60s會被自動**
這裡synchronousqueue是輕量級的阻塞佇列,佇列大小為空,相當於直接跳過了佇列(這裡也可以用linkedblockingqueue等佇列來代替(將大小設定為0),只是效率比synchronousqueue要低)
Java執行緒池
executors類詳解 此包中所定義的 executor executorservice scheduledexecutorservice threadfactory 和 callable 類的工廠和實用方法。此類支援以下各種方法 建立並返回設定有常用配置字串的 executorservice 的...
Java執行緒池
一 執行緒池 單執行緒 public static void runsinglethreadpool public static void runsinglethreadpoolwithfactory private static class mythreadfactory implements t...
java 執行緒池
1.執行緒池的作用 限制系統中執行執行緒的數量 2.為什麼要用執行緒池 2.1.減少了建立和銷毀執行緒的次數,每個工作執行緒都可以被重複利用,可執行多個任務.2.2 可以根據系統的承受能力,調整執行緒池中工作線執行緒的數目,防止因為消耗過多的記憶體,而把伺服器累趴下。3.執行緒池介面類 3.1 ex...