构造函数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueueworkQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
参数
corePoolSize: 指定了线程池中的线程数量。
maximumPoolSize: 指定了线程池中的最大线程数量。
keepAliveTime: 当前线程池数量超过corePoolSize时,多余的空闲线程的存活时间,即多次时间内会被销毁。
unit: keepAliveTime的单位
workQueue: 任务队列,被提交但尚未被执行的任务。
threadFactory: 线程工厂,用于创建线程,一般用默认的即可。
handler: 拒绝策略,当任务太多来不及处理,如何拒绝任务。
阻塞队列
- ArrayBlockingQueue , 由数组结构组成的有界阻塞队列。
- LinkedBlockingQueue , 由链表结构组成的有界阻塞队列。
- PriorityBlockingQueue , 支持优先级排序的无界阻塞队列。
- SynchronousQueue, 不储存元素的阻塞队列。
- LinkedTransferQueue,由链表结构组成的无界阻塞队列。
- LinkedBlockingDeque, 由链表结构组成的双向阻塞队列。
拒绝策略
-
AbortPolicy,这是默认策略,指的是丢弃任务,抛出异常;
-
CallerRunsPolicy, 简单的说,就是后面排队的线程就在那等着,被拒绝的任务在主线程中运行,所以主线程就被阻塞了,别的任务只能在被拒绝的任务执行完后,才会继续被提交到线程池中。
-
DiscardOldestPolicy, 指的是丢弃等待队列中最久的任务,并且执行当期任务;
-
DiscardPolicy, 直接丢弃任务,也不抛异常。