ThreadPoolExecutor線程池
為什麽使用線程池:
1、創建/銷毀線程伴隨著系統開銷,過於頻繁的創建/銷毀線程,會很大程度上影響處理效率。
2、線程並發數量過多,搶占系統資源從而導致阻塞。
3、對線程進行一些簡單的管理。
在java中,線程池的類為ThreadPoolExecutor,該類提供了四種構造方法:
//五個參數的構造函數 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) //六個參數的構造函數-1 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory)//六個參數的構造函數-2 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)//七個參數的構造函數 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
方法中的參數:
int corePoolSize 線程池中核心線程大小
在線程池中的線程小於核心線程數時,則新建的線程屬於核心線程,否則屬於非核心線程。默認情況下,核心線程會一直存貨於線程池,即使什麽也不做。但如果指定類中的allowCoreThreadTimeOut為true,則核心線程閑置一定時間後也會被銷毀,具體時間,由參數指定。
int maximumPoolSize 線程池中最大線程數
線程池中存在的線程數量不會超過最大線程數,如果在達到最大線程數後仍有新的任務需要執行,則會進行排隊。
long keepAliveTime 非核心線程的最大存活時間
線程池中的非核心線程處於閑置狀態時,則會開始計時,達到指定時間後將被銷毀。如果指定參數allowCoreThreadTimeOut為true,則核心線程同樣適用。
TimeUnit unit keepAliveTime的單位
類型TimeUnit是枚舉類型,包括
NANOSECONDS : 1微毫秒 = 1微秒 / 1000
MICROSECONDS : 1微秒 = 1毫秒 / 1000
MILLISECONDS : 1毫秒 = 1秒 /1000
SECONDS : 秒
MINUTES : 分
HOURS : 小時
DAYS : 天
BlockingQueue<Runnable> workQueue 任務隊列
等待執行的Runnable對象。
原文鏈接:https://www.jianshu.com/p/210eab345423
ThreadPoolExecutor線程池