1.前言:在乙個 jvm 裡建立太多的執行緒可能會導致系統由於過度消耗記憶體而用完記憶體或「切換過度」。為了防止資源不足,伺服器應用程式需要一些辦法來限制任何給定時刻處理的請求數目。
2.執行緒池的作用:執行緒池為執行緒生命週期開銷問題和資源不足問題提供了解決方案。通過對多個任務重用執行緒,執行緒建立的開銷被分攤到了多個任務上。其好處是,因為在請求到達時執行緒已經存在,所以無意中也消除了執行緒建立所帶來的延遲。這樣,就可以立即為請求服務,使應用程式響應更快。而且,通過適當地調整執行緒池中的執行緒數目,也就是當請求的數目超過某個閾值時,就強制其它任何新到的請求一直等待,直到獲得乙個執行緒來處理為止,從而可以防止資源不足。
3.常見執行緒池:
1.newcachedthreadpool建立乙個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活**空閒執行緒,若無可**,則新建執行緒。
2.newfixedthreadpool 建立乙個定長線程池,可控制線程最大併發數,超出的執行緒會在佇列中等待。
3.newscheduledthreadpool 建立乙個定長執行緒池,支援定時及週期性任務執行。
4.newsinglethreadexecutor 建立乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(fifo, lifo, 優先順序)執行。
示例:各個執行緒池使用的特點不同,在此就只做乙個示例:
public class liftoff implements runnable
public liftoff(int countdown)
public string status()
public void run() catch (interruptedexception e)
}}
主線程:
public class testexecutor
}
4.執行緒使用的弊端:
執行緒池是構建多執行緒應用程式的強大機制,但使用它並不是沒有風險的。用執行緒池構建的應用程式容易遭受任何其它多執行緒應用程式容易遭受的所有併發風險,諸如同步錯誤和死鎖,它還容易遭受特定於執行緒池的少數其它風險,諸如與池有關的死鎖、資源不足和執行緒洩漏。
Java併發 執行緒池原理
執行緒池是j.u.c中乙個非常常用的元件,利於執行緒池技術可以有效利於執行緒資源,避免頻繁的建立和銷毀執行緒造成的系統開銷,避免過多的建立執行緒耗盡系統資源,同時還可以更好對管理執行緒,包括關閉 中斷以及狀態監控等等。1.提交任務 2.核心執行緒數是否已滿 3.若核心執行緒數已滿,則將任務加入等待佇...
java併發程式設計 執行緒池
降低資源消耗 提高響應速度 t1 執行緒建立的時間 t2 工作任務執行額時間 t3 執行緒銷毀時間 提高了執行緒的可管理性 corepoolsize 核心執行緒數 如果執行的執行緒數大於核心執行緒數,則會先進入到阻塞佇列裡 maxinumpoolsize 允許最大執行緒數 執行緒池所建立的執行緒數一...
Java 執行緒池併發程式設計詳解
本博文分為6個部分 1.bizprocessor 具體的事務處理邏輯,被多執行緒呼叫。2.bizasynctaskcall 實現callable介面,用於組裝futuretask。3.bizfuturetask 代表乙個非同步計算任務,用於提交任務非同步執行,並返回計算結果。4.bizexecuto...