基于 API 29
什么是線程池?
代表線程池的是一個接口Executor,它只有一個execute方法,接口Executor真正實現(xiàn)類是ThreadPoolExecutor。
引用線程池好處:
1)提升性能。創(chuàng)建和消耗對象費時費CPU資源。
2)防止內(nèi)存過度消耗??刂苹顒泳€程的數(shù)量,防止并發(fā)線程過多。
四種線程池:

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ù):

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的子類。