優(yōu)勢?
①降低系統(tǒng)資源消耗咨油,通過重用已存在的線程,降低線程創(chuàng)建和銷毀造成的消耗原在;
②提高系統(tǒng)響應(yīng)速度友扰,當有任務(wù)到達時,無需等待新線程的創(chuàng)建便能立即執(zhí)行庶柿;
③方便線程并發(fā)數(shù)的管控村怪,線程若是無限制的創(chuàng)建,不僅會額外消耗大量系統(tǒng)資源浮庐,更是占用過多資源而阻塞系統(tǒng)或oom等狀況甚负,從而降低系統(tǒng)的穩(wěn)定性。線程池能有效管控線程审残,統(tǒng)一分配梭域、調(diào)優(yōu),提供資源使用率搅轿;
④更強大的功能碰辅,線程池提供了定時、定期以及可控線程數(shù)等功能的線程池介时,使用方便簡單没宾。
二 使用 創(chuàng)建 線程池?
??ExecutorService service =newThreadPoolExecutor(....);
publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize? 核心線程??
核心線程一直存活在線程池中凌彬,即便他們在線程池中處于閑置狀態(tài)。除非我們將ThreadPoolExecutor的allowCoreThreadTimeOut屬性設(shè)為true的時候
maximumPoolSize?最大線程數(shù)
keepAliveTime? 時間?
非核心線程閑置時的超時時長循衰,對于非核心線程铲敛,閑置時間超過這個時間,非核心線程就會被回收会钝。只有對ThreadPoolExecutor的allowCoreThreadTimeOut屬性設(shè)為true的時候伐蒋,這個超時時間才會對核心線程產(chǎn)生效果。
unit? 時間單位?
可以使用的單位有天(TimeUnit.DAYS)迁酸,小時(TimeUnit.HOURS)先鱼,分鐘(TimeUnit.MINUTES),毫秒(TimeUnit.MILLISECONDS)奸鬓,微秒(TimeUnit.MICROSECONDS, 千分之一毫秒)和毫微秒(TimeUnit.NANOSECONDS, 千分之一微秒);
workQueue?阻塞隊列?
通過線程池中的execute方法提交的Runable對象都會存儲在該隊列中焙畔。我們可以選擇下面幾個阻塞隊列。
執(zhí)行流程??
①如果在線程池中的線程數(shù)量沒有達到核心的線程數(shù)量串远,這時候就回啟動一個核心線程來執(zhí)行任務(wù)宏多。
②如果線程池中的線程數(shù)量已經(jīng)超過核心線程數(shù),這時候任務(wù)就會被插入到任務(wù)隊列中排隊等待執(zhí)行澡罚。
③由于任務(wù)隊列已滿伸但,無法將任務(wù)插入到任務(wù)隊列中。這個時候如果線程池中的線程數(shù)量沒有達到線程池所設(shè)定的最大值留搔,那么這時候就會立即啟動一個非核心線程來執(zhí)行任務(wù)更胖。
④如果線程池中的數(shù)量達到了所規(guī)定的最大值,那么就會拒絕執(zhí)行此任務(wù)隔显,這時候就會調(diào)用RejectedExecutionHandler中的rejectedExecution方法來通知調(diào)用者函喉。