java執行緒池的原理

2021-08-19 02:33:31 字數 1334 閱讀 2769

前天去面試,一問三不知,然後回來趕緊惡補下,發現執行緒池沒有想象中那麼難,今天通過閱讀優秀的部落格對執行緒池大概坐下總結。

大神部落格:

頂層:介面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.若核心執行緒數已滿,則將任務加入等待佇...