6 1 執行緒池的優點 以及各個引數的意義 使用示例

2021-10-07 19:27:38 字數 2916 閱讀 2323

1、減少資源的消耗:較少執行緒建立和銷毀造成的消耗

2、提高響應速度:當任務到達的時候,就能夠立刻執行,減少了執行緒建立和銷毀的時間

3、能夠更好地管理執行緒

executor:介面,是執行緒池的基礎,將任務的提交與任務的執行分離開來。

executorservice:介面:繼承了executor,新加了shutdown(),submit()

abstractexecutorservice:實現了executorservice大部分方法,可以少寫很多**

threadpoolexecutor:執行緒池的核心實現了,用來執行被提交的任務

scheduledexecutorservice:提供了帶週期執行的executorservice

scheduledthreadpoolexecutor:可以延遲執行任務

public threadpoolexecutor(

int corepoolsize,

int maximumpoolsize,

long keepalivetime,

timeunit unit,

blockingqueueworkqueue,

threadfactory threadfactory,

rejectedexecutionhandler handler)

執行緒池中的核心執行緒數,當提交乙個任務時,執行緒池建立乙個新執行緒執行任務,直到執行緒數=corepoolsize,之後提交的任務會被儲存到阻塞佇列中,等待被執行。

備註:如果執行了執行緒池的prestartallcorethreads()方法,執行緒池會提前建立好

corepoolsize數量的執行緒,提高效率

如果執行緒數=corepoolsize,且阻塞佇列也被塞滿了,這個時候再提交任務,就會再建立執行緒執行任務,但是執行緒池匯流排程數必須<=

maximumpoolsize

當執行緒數》corepoolsize時,當前執行緒沒有任務執行,執行緒繼續存活的時間

keepalivetime執行緒存活的時間單位

timeunit.hours.tomillis(1)

1小時轉分

timeunit.hours.tominutes(60)

60小時轉分

timeunit.hours.sleep(5) 

執行緒休眠5秒

timeunit.hours.convert(1, timeunit.minutes) 

1小時轉秒

常用工具類

timeunit.days 

日的工具類

timeunit.hours

時的工具類 

timeunit.minutes 

分的工具類

timeunit.seconds 

秒的工具類 

timeunit.milliseconds

毫秒的工具類

workqueue必須是blockingqueue阻塞佇列:當執行緒池的執行緒數超過corepoolsize的時候,多餘的執行緒就會進入阻塞佇列中,等待被執行

應當盡量使用有界阻塞佇列,比如:linkedblockingqueue、arrayblokngqueue、synchronousqueue、priorityblockingqueue,使用無界阻塞佇列(比如:delayqueue、linkedtransferqueue)會產生如下影響

1、當執行緒數超過corepoolsize之後,其他執行緒就會放在無界佇列中等待,就不會再建立新的執行緒來執行任務了,導致界佇列時maximumpoolsize將是乙個無效引數。

2、由於1,使用無界佇列的keepalivetime引數無效

3、無界佇列可能會耗盡系統資源

建立執行緒的工廠,使用場景

1、通過自定義的執行緒工廠,給每個新建的執行緒設定乙個有識別度的執行緒名

2、通過執行緒工廠把所有的執行緒設定為守護執行緒

demo

public class test 

},// new threadpoolexecutor.callerrunspolicy());

// new threadpoolexecutor.discardoldestpolicy());

// new threadpoolexecutor.discardpolicy());

new abortpolicy());}}

當阻塞佇列被塞滿了,並且沒有多餘的執行緒執行任務的時候,對於新新增進來的任務必須做乙個處理

abortpolicy

預設:直接拋異常

callerrunspolicy

用呼叫者執行緒來執行(比如main)

discardoldestpolicy

丟掉佇列中最靠前的任務,並執行當前任務

discardpolicy

直接丟掉任務

實現rejectedexecutionhandler

日誌記錄或者持久化儲存

public class test 

},// new threadpoolexecutor.callerrunspolicy());

// new threadpoolexecutor.discardoldestpolicy());

// new threadpoolexecutor.discardpolicy());

new abortpolicy());}}

執行緒池總類以及執行緒池的核心引數簡述

jdk自帶執行緒池總類 1 newfixedthreadpool建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個工作執行緒,如果工作執行緒數量達到執行緒池初始的最大數,則將提交的任務存入到池佇列中。2 newcachedthreadpool建立乙個可快取的執行緒池。這種型別的執行緒池...

執行緒池引數以及說明

一 七大核心引數 1.corepoolsize 核心執行緒數 2.maximumpoolsize 最大執行緒池引數 3.keepalivetime 任務結束後,執行緒存活此處指定時間後才會被釋放 4.timeunit 上乙個引數的單位,常用s,ms 5.blockingqueue 佇列,當核心執行緒...

為什麼要用執行緒池,執行緒池的引數解釋

為什麼要用執行緒池?1 降低資源消耗 提高執行緒利用率,降低建立和銷毀執行緒的消耗。2 提高響應速度 任務來了,直接有執行緒可用可執行,而不是先建立執行緒,再執行。3 提高執行緒的可管理性 執行緒是稀缺資源,使用執行緒池可以統一分配調優監控。corepoolsize代表核心執行緒數,也就是正常情況下...