執行緒池的理解2

2022-09-09 03:51:07 字數 1081 閱讀 4492

使用者提交任務

條件1.核心池已滿?==是==>2.佇列已滿?==是==>3.執行緒池已滿?==是==>按照策略執行不能處理的任務

|否                                         |否                                 |否

執行緒建立執行緒執行任務        將任務儲存到阻塞佇列       建立執行緒執行任務

(addworker)                 執行緒主要的步驟          需要獲取全域性鎖,影響效能

在execte()中建立乙個新的執行緒(步驟1、3)

從阻塞佇列中取

直接丟擲異常 abortpolicy

只用呼叫者所在的執行緒來執行任務callerrunspolicy

對其佇列裡最老的乙個任務,並執行任務discardoldestpolocy

不處理,丟棄掉discardpolicy

任務的性質:cpu密集型,io密集型、混合型任務。cpu密集型的任務,應該配置盡可能小的執行緒,如配置num(cpu)+1個執行緒的執行緒池。由於io密集型的任務並不是一直在執行任務,就可以盡可能多的配置執行緒數量如2*num(cpu)。對於混合型的任務,可以拆分成cpu密集型和io密集型任務,只要這兩個任務執行的時間差相差不是太大,那麼分解後的吞吐量將高於序列時的吞吐量,如果二者相差很大,沒必要拆解。

任務的優先順序:可通過優先順序阻塞佇列prioriblockingqueue來處理。

任務的依賴性:是否依賴其他資源,如資料庫連線,執行緒數應該設定大一點

建議使用有界佇列,增加系統的穩定性和預警能力

taskcount,completedtaskcount,largestpoolsize,poolsize,activitecount

//todo 阻塞佇列,執行緒池框架

執行緒池的理解

原來一直對執行緒池心存疑惑.第乙個疑惑是.執行緒類在例項化的時候就已經指定了run函式了,也就是說,乙個執行緒在例項化的時候,他能做什麼就已經定下來了,要做別的事,就要新開乙個執行緒.這感覺就和執行緒池的思想違背了,怎麼樣從執行緒池裡面拿乙個執行緒出來就可以執行呢?執行完了然後再放回去呢?第二個疑惑...

執行緒池的理解

1.為什麼要使用多執行緒?充分利用cpu資源,併發去做多個事情 2.單核cpu機器適不適合用多執行緒?適合,如果是單執行緒,執行緒中需要等待io,此時cpu就空閒出來了 3.執行緒什麼時候讓出cpu?阻塞時,wait,await,等待io,sleep,yield,結束了 4.執行緒是什麼?程序的最小...

執行緒池的理解

學校組織體檢,有一項內容是抽血化驗.抽血是在乙個房間 執行緒池 裡進行,假設 房間裡面有6個核心視窗進行抽血 corepoolsize 如果來抽血化驗的人太多,核心視窗也可以擴容,最大可以擴充套件到10個視窗.maximumpoolsize 其中有6個核心視窗,和4個非核心視窗.非核心視窗在抽血化驗...