線程池的優(yōu)點
1.重用線程池中的線程,避免線程的創(chuàng)建和銷毀所帶來的性能開銷。
2.控制線程池的最大并發(fā)數(shù),避免大量的線程之間因相互搶占系統(tǒng)資源導致的阻塞現(xiàn)象。
3.能夠對線程進行簡單的管理,并提供定時執(zhí)行以及指定間隔循環(huán)執(zhí)行等功能。

ThreadPoolExecutor
線程池的真正實現(xiàn),它的構造方法提供了一系列參數(shù)來配置線程池。
corePoolSize:核心線程數(shù)(CPU核心數(shù)+1)
maximumPoolSize:最大線程數(shù)(CUP核心數(shù)×2+1)
keepAliveTime:非核心線程閑置的超時時長(1秒)
unit:指定keepAliveTime的時間單位
workQueue:線程池中的任務隊列(容量128)
threadFactory:線程工廠,為線程池提供創(chuàng)建新線程的功能。
ThreadPoolExecutor執(zhí)行規(guī)則
1.如果線程池中的線程數(shù)量未達到核心線程數(shù)量,會直接啟動一個核心線程執(zhí)行任務。
2.如果線程池中的線程數(shù)量已經達到或者超過核心線程數(shù)量,那么任務會被插入到任務隊列中排隊等待執(zhí)行。
3.如果無法插入到任務隊列中,往往是由于任務隊列已滿,這時候如果線程數(shù)量未達到線程池規(guī)定的最大值,則立刻啟動一個非核心線程來執(zhí)行任務。
4.如果線程數(shù)量已經達到線程池規(guī)定的最大值,那么就拒絕執(zhí)行此任務,ThreadPoolExecutor會調用RejectedExecutionHandler的rejectedExecution方法通知調用者。
線程池的分類
FixedThreadPool
只有核心線程、線程數(shù)量固定、沒有超時機制、空閑狀態(tài)也不會被回收、任務隊列也沒有大小限制
CachedThreadPool
只有核心線程、線程數(shù)量不定、有超時機制、60秒閑置線程回收、最大線程數(shù)是Integer.MAX_VALUE
ScheduledThreadPool
核心線程固定、非核心線程Integer.MAX_VALUE、非核心線程閑置立即被回收
SingleThreadExecutor
只有一個核心線程、所有任務都在同一線程中按順序執(zhí)行