-
提交一个任务到线程池时,线程池会创建一个新的线程来执行任务。注意: 即使有
空闲的基本线程
能执行该任务,也会创建新的线程。 -
如果线程池中的线程数已经大于或等于
corePoolSize
,则不会创建新的线程。 -
如果调用了线程池的
prestartAllCoreThreads()方法
,线程池会提前创建并启动所有基本线程
。
maximumPoolSize(线程池的最大数量): 线程池允许创建的最大线程数。
-
阻塞队列已满,线程数小于
maximumPoolSize
便可以创建新的线程执行任务。 -
如果使用无界的阻塞队列,
该参数没有什么效果
。
workQueue(工作队列): 用于保存等待执行的任务的阻塞队列。
-
ArrayBlockingQueue:
基于数组结构的有界阻塞队列,按FIFO(先进先出)原则对任务进行排序。使用该队列,线程池中能创建的最大线程数为maximumPoolSize
。 -
LinkedBlockingQueue:
基于链表结构的无界阻塞队列,按FIFO(先进先出)原则对任务进行排序,吞吐量高于ArrayBlockingQueue
。使用该队列,线程池中能创建的最大线程数为corePoolSize
。静态工厂方法Executor.newFixedThreadPool()
使用了这个队列。 -
SynchronousQueue:
一个不存储元素的阻塞队列。添加任务的操作必须等到另一个线程的移除操作
,否则添加操作一直处于阻塞状态
。静态工厂方法Executor.newCachedThreadPool()
使用了这个队列。 -
PriorityBlokingQueue:
一个支持优先级的无界阻塞队列。使用该队列,线程池中能创建的最大线程数为corePoolSize
。
keepAliveTime(线程活动保持时间): 线程池的工作线程空闲后
,保持存活的时间
。如果任务多而且任务的执行时间比较短
,可以调大keepAliveTime
,提高线程的利用率。
unit(线程活动保持时间的单位): 可选单位有DAYS
、HOURS
、MINUTES
、毫秒
、微秒
、纳秒
。
handler(饱和策略,或者又称拒绝策略): 当队列和线程池都满了