頻繁地建立執行緒很浪費資源。執行緒池的執行緒可以復用,執行完乙個任務後可以執行另乙個任務。
runstate表示當前執行緒池的狀態,它是乙個volatile變數用來保證執行緒之間的可見性;
下面的幾個static final變數表示runstate可能的幾個取值。
當建立執行緒池後,初始時,執行緒池處於running狀態;
如果呼叫了shutdown()方法,則執行緒池處於shutdown狀態,此時執行緒池不能夠接受新的任務,它會等待所有任務執行完畢;
如果呼叫了shutdownnow()方法,則執行緒池處於stop狀態,此時執行緒池不能接受新的任務,並且會去嘗試終止正在執行的任務;
當執行緒池處於shutdown或stop狀態,並且所有工作執行緒已經銷毀,任務快取佇列已經清空或執行結束後,執行緒池被設定為terminated狀態。
4種拒絕策略
threadpoolexecutor.abortpolicy:丟棄任務並丟擲rejectedexecutionexception異常。
threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。
threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)
threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務
java執行緒池的原理
前天去面試,一問三不知,然後回來趕緊惡補下,發現執行緒池沒有想象中那麼難,今天通過閱讀優秀的部落格對執行緒池大概坐下總結。大神部落格 頂層 介面executor,預設只有乙個executor方法,void 第二層介面 executorservice繼承executor介面,定義一些執行執行緒池的方法...
Java執行緒池實現原理
threadpoolexecutor是jdk提供的執行緒池實現,threadpoolexector實現了execturo介面,可以自動幫助使用者建立,銷毀和保護執行緒,先來看一下最基本的使用方式 建立乙個執行緒池final executor executor new threadpoolexecut...
Java併發 執行緒池原理
執行緒池是j.u.c中乙個非常常用的元件,利於執行緒池技術可以有效利於執行緒資源,避免頻繁的建立和銷毀執行緒造成的系統開銷,避免過多的建立執行緒耗盡系統資源,同時還可以更好對管理執行緒,包括關閉 中斷以及狀態監控等等。1.提交任務 2.核心執行緒數是否已滿 3.若核心執行緒數已滿,則將任務加入等待佇...