多執行緒之執行緒池

2021-08-09 00:25:59 字數 3091 閱讀 6172

執行緒框架關係:

executor 介面

executorservice 介面                                繼承 executor 

abstractexecutorservice 抽象類            實現 executorservice                       

threadpoolexecutor                                   繼承abstractexecutorservice       過載一系列方法

executor是乙個頂層介面,在它裡面只宣告了乙個方法execute(runnable),返回值為void,引數為runnable型別,從字面意思可以理解,就是用來執行傳進去的任務的;

executorservice介面繼承了executor介面,並宣告了一些方法:submit、invokeall、invokeany以及shutdown等;

threadpoolexecutor類中有幾個非常重要的方法:

execute():向執行緒池提交乙個任務。在executor宣告

submit():向執行緒池提交乙個任務,有返回結果(future).在executorservice宣告,abstractexecutorservice 實現,而threadpoolexecutor並沒有重寫

shutdown()用來關閉執行緒池的。執行緒池處於shutdown狀態,此時執行緒池不能夠接受新的任務,它會等待所有任務執行完畢;

shutdownnow()用來關閉執行緒池的。則執行緒池處於stop狀態,此時執行緒池不能接受新的任務,並且會去嘗試終止正在執行的任務;

threadpoolexecutor:引數解析

1.int corepoolsize:核心池的大小

執行緒池初始化時,執行緒池沒有任何執行緒(執行緒數為0),等有任務來,才建立執行緒去執行任務(除非顯示呼叫prestartallcorethreads()或者prestartcorethread())。

當執行緒池中的執行緒資料達到該值,後面來的任務,將放在快取佇列中

2.int maximumpoolsize: 執行緒池最大執行緒數

3.long keepalivetime:執行緒存活時間

執行緒空閒最多保持多久時間會終止。預設情況下,只有當執行緒池中的執行緒數大於corepoolsize時,keepalivetime才會起作用。即當執行緒池中的執行緒數大於corepoolsiz時,

keepalivetime引數也會起作用,直到執行緒池中的執行緒數為0;

4.timeunit unit:單位

5.blockingqueueworkqueue:工作佇列

arrayblockingqueue;linkedblockingqueue;synchronousqueue;

6.threadfactory threadfactory:執行緒工廠,主要用來建立執行緒;

7.rejectedexecutionhandler handler:表示當拒絕處理任務時的策略

threadpoolexecutor.abortpolicy:丟棄任務並丟擲rejectedexecutionexception異常。 

threadpoolexecutor.discardpolicy:也是丟棄任務,但是不丟擲異常。 

threadpoolexecutor.discardoldestpolicy:丟棄佇列最前面的任務,然後重新嘗試執行任務(重複此過程)

threadpoolexecutor.callerrunspolicy:由呼叫執行緒處理該任務 

執行緒池狀態:

running/shutdown/stop

當建立執行緒池後,初始時,執行緒池處於running狀態;

如果呼叫了shutdown()方法,則執行緒池處於shutdown狀態,此時執行緒池不能夠接受新的任務,它會等待所有任務執行完畢;

如果呼叫了shutdownnow()方法,則執行緒池處於stop狀態,此時執行緒池不能接受新的任務,並且會去嘗試終止正在執行的任務;

當執行緒池處於shutdown或stop狀態,並且所有工作執行緒已經銷毀,任務快取佇列已經清空或執行結束後,執行緒池被設定為terminated狀態。

corepoolsize,maximumpoolsize,workqueue之間關係

1.當執行緒池小於corepoolsize時,新提交任務將建立乙個新執行緒執行任務,即使此時執行緒池中存在空閒執行緒。 

2.當執行緒池達到corepoolsize時,新提交任務將被放入workqueue中,等待執行緒池中任務排程執行 

3.當workqueue已滿,且maximumpoolsize>corepoolsize時,新提交任務會建立新執行緒執行任務 

4.當提交任務數超過maximumpoolsize時,新提交任務由rejectedexecutionhandler處理 

5.當執行緒池中超過corepoolsize執行緒,空閒時間達到keepalivetime時,關閉空閒執行緒 

6.當設定allowcorethreadtimeout(true)時,執行緒池中corepoolsize執行緒空閒時間達到keepalivetime也將關閉 

多執行緒之執行緒池

首先說一說執行緒池的優點 方便管理,監控執行緒狀態 提高執行緒響應速度 執行緒可以重複使用 executorservice普通排程池核心介面 submit runnable callable future execute runnable void 執行緒池工作流程 當任務到達執行緒池時的工作順序,...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...

javaSE 多執行緒之執行緒池

1 使用語法 publicstaticvoiduseexecutorservice executorservice shutdown 輸出 pool 1 thread 3 pool 1 thread 2 pool 1 thread 1 pool 1 thread 3 pool 1 thread 2 ...