前天去面試,一問三不知,然後回來趕緊惡補下,發現執行緒池沒有想象中那麼難,今天通過閱讀優秀的部落格對執行緒池大概坐下總結。
大神部落格:
頂層:介面executor,預設只有乙個executor方法,void
第二層介面:executorservice繼承executor介面,定義一些執行執行緒池的方法
第三層:實現類:abstractexecutorservice抽象類,和介面schedleexecutorservice
第四層:實現類核心類,threadpoolexecutor
public
class
test
executor.shutdown();
}}class
mytask
implements
runnable
@override
public
void run() catch (interruptedexception e)
system.out.println("task "+tasknum+"執行完畢");
}}
corepoolsize:核心執行緒數量
maxnumpoolsize,執行緒池最大執行緒數量
keepalivetime:空閒執行緒最大存活時間
unit:列舉類,時間單位,houror,mininute,second,毫秒,微妙,納秒
workqueue:阻塞佇列,用於存放當核心執行緒數達到峰值時,存放的執行緒,一般有arrayblockingqueue,linkedblockingqueue和sychronousqueue
兩種方式:
預設介面實現的executor()方法,該方法沒有返回值
submit(),在executorservcie介面定義,由abstractexecutorservice實現,其實還是呼叫executor方法,只是返回結果封裝了future物件
當執行乙個執行緒後,先判斷當前執行緒數是否大於corepoolsize,如果小於則重現建立乙個執行緒去處理
當執行緒數目大於或等於corepoolsize,則將執行緒存入阻塞佇列中,等待有空閒執行緒出現;
如果佇列執行緒已滿,則建立新的執行緒去執行;
當執行緒數達到maxpoolsize時,啟動任務拒絕策略,這個由人工設定,一般預設設定拋異常,rejectexecutionexception;
執行緒復用
定義乙個worker類,然後啟動執行緒執行runworker方法,迴圈獲取gettask()阻塞佇列中的runnable任務
控制最大併發數
管理執行緒
java 執行緒池的原理
頻繁地建立執行緒很浪費資源。執行緒池的執行緒可以復用,執行完乙個任務後可以執行另乙個任務。runstate表示當前執行緒池的狀態,它是乙個volatile變數用來保證執行緒之間的可見性 下面的幾個static final變數表示runstate可能的幾個取值。當建立執行緒池後,初始時,執行緒池處於r...
Java執行緒池實現原理
threadpoolexecutor是jdk提供的執行緒池實現,threadpoolexector實現了execturo介面,可以自動幫助使用者建立,銷毀和保護執行緒,先來看一下最基本的使用方式 建立乙個執行緒池final executor executor new threadpoolexecut...
Java併發 執行緒池原理
執行緒池是j.u.c中乙個非常常用的元件,利於執行緒池技術可以有效利於執行緒資源,避免頻繁的建立和銷毀執行緒造成的系統開銷,避免過多的建立執行緒耗盡系統資源,同時還可以更好對管理執行緒,包括關閉 中斷以及狀態監控等等。1.提交任務 2.核心執行緒數是否已滿 3.若核心執行緒數已滿,則將任務加入等待佇...