ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
corePoolSize 核心線程數 當線程數<corePoolSize時,新建線程。java
maxinumPoolSize 最大線程數線程
keepAliveTime 存活時間 當線程數>corePoolSize時,空閒線程存活的最長時間code
timeUnit 單位時間繼承
workQueue 保存任務的阻塞隊列隊列
threadFactory 線程建立工廠get
handler 拒絕策略it
拒絕策略默認有4種 1.拋出異常 2.直接丟棄 3.丟棄隊列中最老的 4.直接調用run方法,阻塞執行。 固然也能夠繼承RejectedExecutionHandler實現本身的拒絕策略io
由於參數比較多,java中的Exectors提供了簡便的線程池建立方式。thread
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
能夠看到用的workQueue是LinkedBlockingQueue,說明隊列無限長,線程池最大值就是入參nThreads。線程池
public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); }
SynchronousQueue是容量爲1的阻塞隊列,因此新增任務的時候會新起線程,線程數最大值爲Integer.MAX_VALUE
public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); }
不用說了,線程數最大爲1。
繼承於Future,可以實現帶返回值的線程執行結果。 幾個特殊方法, isDone() get(),get(Long timeOut,TimeUtil) cancel(),isCancel()