執行緒池名稱
引數適用場景
弊端newsinglethreadexecutor
(1, 1, 0,毫秒時間單位, linkedblockingqueue)
適用需要序列執行的任務
任務會堆積在佇列中,數量多的話,會造成資源不足,引起oom
newfixedthreadpool
(n, n, 0, 毫秒時間單位, linkedblockingqueue)
適用數量固定的任務
任務會堆積在佇列中,數量多的話,會造成資源不足,引起oom
newcachedthreadpool
(0, int最大值, 60, 秒時間單位, synchronousqueue)
適用執行時間短,數量變化多的任務
執行任務的執行緒數量最大是int的最大值,執行緒數量多的話,會引起oom
newscheduledthreadpool
——適用定時、週期性的任務
執行任務的執行緒數量最大是int的最大值,執行緒數量多的話,會引起oom
public
threadpoolexecutor
(int corepoolsize,
int maximumpoolsize,
long keepalivetime,
timeunit unit,
blockingqueue
workqueue,
threadfactory threadfactory,
rejectedexecutionhandler hander)
corepoolsize:核心執行緒數,指定了執行緒池裡的執行緒數量
maximumpoolsize:最大執行緒數
keepalivetime:超時時間,當執行緒數大於核心執行緒數,小於最大執行緒數,空閒的執行緒到了時間就會被銷毀
unit: 超時時間,時間單位
workqueue:任務佇列,用於存放提交但未執行的任務,有四種
threadfactory:執行緒工廠,用於建立執行緒
handler:拒絕策略,有三種
synchronousqueue:直接提交佇列,無長度,提交的任務不會被儲存,會被提交到新的執行緒執行,如果沒有新的執行緒可以建立了,會執行拒絕策略;
arrayblockingqueue:有界任務佇列,長度由引數指定;
linkedblockingqueue:無界任務佇列,佇列長度最大為int的最大值;
prioriblockingqueue:特殊的無界佇列,和普通的先進先出佇列不同,它是優先順序高的先出;
abortpolocy:中止策略,該策略會丟擲異常,阻止系統工作;
callerrunspolic:只要執行緒池未關閉,該策略會直接在呼叫者的執行緒中,執行被丟棄的任務,實際上任務是不丟棄的,會導致提交執行緒的效能急劇下降;
discardoledestpolicy:丟棄策略,該策略默默地丟棄無法處理的任務,不予進行處理;
我們可以實現rejectedexecutionhander介面,進行自定義策略。
自己可以根據需求,定義拒絕策略;
補充完善的執行緒資訊,比如執行緒名,當線上出現問題時,可以根據執行緒名稱,方便排查問題;
執行緒池面試相關
你們專案中是如何建立執行緒池的呢?new threadpoolexcutor excutorservice service excutors.newfixpoolexcutor n excutorservice service excutors.newcachepoolexcutor excutor...
java 面試題 記憶體池 程序池 執行緒池
自定義記憶體池的思想通過這個 池 字表露無疑,應用程式可以通過系統的記憶體分配呼叫預先一次性申請適當大小的記憶體作為乙個記憶體池,之後應用程式自己對記憶體的分配和釋放則可以通過這個記憶體池來完成。只有當記憶體池大小需要動態擴充套件時,才需要再呼叫系統的記憶體分配函式,其他時間對記憶體的一切操作都在應...
執行緒池面試題一
1.執行緒池執行流程 2.執行緒池的執行緒是如何做到復用的 執行緒池中的執行緒在迴圈中嘗試取任務執行,這一步會被阻塞,如果設定了allowcorethreadtimeout為true,則執行緒池中的所有執行緒都會在keepalivetime時間超時後還未取到任務而退出。或者執行緒池已經stop,那麼...