1. 程式人生 > >ThreadPoolExecutor線程池

ThreadPoolExecutor線程池

size ali adf ive 核心線程 時間 live body adt

為什麽使用線程池:

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線程池