執行緒池實現原理

2022-06-28 01:57:12 字數 1194 閱讀 9013

上面這幅圖作者表達的不夠完整,作者想通過如下文本來表達內含本質。過程如下

如果請求執行緒小於執行緒池目標執行緒,則執行緒池會新建立執行緒來處理請求

如果請求執行緒數過多,超過了目標執行緒則將請求任務放入佇列中進行緩衝

如果佇列滿了 但未達到最大執行緒池數,這時會新建立執行緒 直到上限為止即maxpollsize

如果maxpoolsize和佇列都滿了,則選擇飽和策略,要麼理解失敗,要不做好歸檔比如打日誌留下現場等。。。

p.p1

span.s1

span.s2

span.s3

建立乙個執行緒池需要輸入幾個引數:

runnabletaskqueue(任務佇列):用於儲存等待執行的任務的阻塞佇列。 可以選擇以下幾個阻塞佇列。

maximumpoolsize(執行緒池最大大小):執行緒池允許建立的最大執行緒數。如果佇列滿了,並且已建立的執行緒數小於最大執行緒數,則執行緒池會再建立新的執行緒執行任務。值得注意的是如果使用了無界的任務佇列這個引數就沒什麼效果。

threadfactory:用於設定建立執行緒的工廠,可以通過執行緒工廠給每個建立出來的執行緒設定更有意義的名字。

rejectedexecutionhandler(飽和策略):當佇列和執行緒池都滿了,說明執行緒池處於飽和狀態,那麼必須採取一種策略處理提交的新任務。這個策略預設情況下是abortpolicy,表示無法處理新任務時丟擲異常。以下是jdk1.5提供的四種策略。

keepalivetime(執行緒活動保持時間):執行緒池的工作執行緒空閒後,保持存活的時間。所以如果任務很多,並且每個任務執行的時間比較短,可以調大這個時間,提高執行緒的利用率。

timeunit(執行緒活動保持時間的單位):可選的單位有天(days),小時(hours),分鐘(minutes),毫秒(milliseconds),微秒(microseconds, 千分之一毫秒)和毫微秒(nanoseconds, 千分之一微秒)

任務佇列容量(阻塞佇列)queuecapacity = (coresizepool/taskcost)*responsetime

摘自-阿里巴巴開發手冊

執行緒池實現原理

蘑菇街面試,設計乙個執行緒池 入隊非阻塞佇列 當佇列中滿了時候,放入資料,資料丟失 阻塞佇列 當佇列滿了的時候,進行等待,什麼時候佇列中有出隊的資料,那麼第11個再放進去 出隊非阻塞佇列 如果現在佇列中沒有元素,取元素,得到的是null 阻塞佇列 等待,什麼時候放進去,再取出來 執行緒池使用的是阻塞...

Java執行緒池實現原理

threadpoolexecutor是jdk提供的執行緒池實現,threadpoolexector實現了execturo介面,可以自動幫助使用者建立,銷毀和保護執行緒,先來看一下最基本的使用方式 建立乙個執行緒池final executor executor new threadpoolexecut...

執行緒池原理 具體實現

一種執行緒使用模式。執行緒過多會帶來排程開銷,進而影響快取區域性性和整體效能。而執行緒池維護著多個執行緒,等待著監督管理者分配可併發執行的任務,即在程式初始化時,建立一定數量的執行緒 又最大限制 從任務佇列中獲取任務,進行處理 執行緒池 至少乙個執行緒 任務佇列 作用 1.避免為大量請求建立執行緒,...