1.執行緒池各個引數講解
public ThreadPoolExecutor(int corePoolSize, //執行緒池核心工作執行緒數量,比如newFixedThreadPool中可以自定義的執行緒數量就是這個引數 int maximumPoolSize, //執行緒池所有工作執行緒的數量,比如newFixedThreadPool中的最大工作執行緒就是核心執行緒數,newCachedThreadPool中的最大工作執行緒數是Integer.MAX_VALUE long keepAliveTime, //非核心執行緒存活的時間,當核心執行緒不夠用的時候,建立出來的輔助工作執行緒在完成任務空閒多久後會被回收 TimeUnit unit, //上面一個引數的單位,分。秒等 BlockingQueue<Runnable> workQueue,//底層使用的阻塞佇列資料結構,比如newFixedThreadPool底層使用LinkedBlockingQueue。工作佇列,儲存已提交但是未執行的任務 ThreadFactory threadFactory, //建立工作執行緒的工廠,保持預設即可 RejectedExecutionHandler handler) { //拒絕策略,即在所有工作執行緒數達到上限,底層阻塞佇列也滿了的時候採取的策略 if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue == null || threadFactory == null || handler == null) throw new NullPointerException(); this.acc = System.getSecurityManager() == null ? null : AccessController.getContext(); this.corePoolSize = corePoolSize; this.maximumPoolSize = maximumPoolSize; this.workQueue = workQueue; this.keepAliveTime = unit.toNanos(keepAliveTime); this.threadFactory = threadFactory; this.handler = handler; }
2.常用執行緒池