線程池

基于 API 29

什么是線程池?

代表線程池的是一個接口Executor,它只有一個execute方法,接口Executor真正實現(xiàn)類是ThreadPoolExecutor。

引用線程池好處:

1)提升性能。創(chuàng)建和消耗對象費時費CPU資源。

2)防止內(nèi)存過度消耗??刂苹顒泳€程的數(shù)量,防止并發(fā)線程過多。

四種線程池:

a

FixedThreadPool:固定大小線程池,只有核心線程,任務(wù)隊列無限大,沒有超時機制,不會被回收。

SingleThreadPool:單任務(wù)線程池,只有一個核心線程,任務(wù)隊列無限大,不會被回收。

CacheThreadPool:緩存線程池,沒有核心線程,有足夠多的非核心線程,當(dāng)執(zhí)行新的任務(wù)時,沒有空閑線程,則會創(chuàng)先新的線程執(zhí)行,若有空閑線程,則會使用空閑線程執(zhí)行任務(wù),非核心線程空閑時長超過60s,則會被回收。

ScheduledThreadPool:定時線程池,核心線程數(shù)量固定,非核心線程足夠多,非核心空線程空閑時常10s會被回收。

四種線程池并不是類,是對線程池的描述,實質(zhì)都是ThreadPoolExecutor,只是創(chuàng)建ThreadPoolExecutor對象時傳入的參數(shù)值不同。


構(gòu)造函數(shù):

b

corePoolSize:核心線程數(shù)量;

maximumPoolSize:線程池中允許的線程最大數(shù)量;

keepAliveTime: 閑置時常,默認情況下指非核心線程的閑置時常,超過這個時間將會被回收,設(shè)置allowCoreThreadTimeOut為true,會作用于核心線程。

unit:枚舉類,時間單位;

workQueue:任務(wù)隊列,用于存放被執(zhí)行的Runnable對象。

threadFactory:線程工廠,ThreadFactory是一個接口,只有一個newThread(Runnable )方法,為線程池創(chuàng)建新的線程。

handler:RejectedExecutionHandler是一個接口,只有一個rejectedExecution(Runnable r, ThreadPoolExecutor executor)方法,在執(zhí)行任務(wù)時,若線程池中超過最大線程數(shù)量或者線程池關(guān)閉,會調(diào)用rejectedExecution方法,拋出RejectedExecutionException異常。

ThreadPoolExecutor有四個內(nèi)部類:CallerRunsPolicy,AbortPolicy,DiscardPolicy,DiscardOldestPolicy都是RejectedExecutionHandler的子類。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容