- 参数含义介绍:
| 参数 | 含义 |
|---|---|
| corePoolSize | 指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到workQueue任务队列中去 |
| maximumPoolSize | 指定了线程池中的最大线程数量 |
| keepAliveTime | 当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁 |
| unit | keepAliveTime的单位 |
| workQueue | 任务队列,被添加到线程池中,但尚未被执行的任务 |
| threadFactory | 线程工厂,用于创建线程 |
| handler | 拒绝策略;当任务超出线程池数量时,如何拒绝任务 |
- 队列
| 队列 | 类名 | 介绍 |
|---|---|---|
| 直接提交队列 | SynchronousQueue | 没有容量,执行一个插入就会阻塞,删除就会唤醒,此时,如果有多条线程任务进来,会直接启用maximumPoolSize对应的线程数量,超出的直接执行拒绝策略 |
| 有界的任务队列 | ArrayBlockingQueue | 若有新的任务加入线程,线程池会创建新的线程,直到创建的线程达到corePoolSize,再有线程进来,会存在队列当中,如果队列存满,会继续创建线程直到达到maximumPoolSize之后执行拒绝策略 |
| 无界的任务队列 | LinkedBlockingQueue | 线程池的任务队列可以无限制的添加新的任务,而线程池能够创建的最大的线程数量就是corePoolSize,maximumPoolSize这个参数等于已经无效了 |
| 优先任务队列 | PriorityBlockingQueue | 在任务中设置优先级,队列会根据优先级进行任务的重排,执行优先级高的任务,任务的执行数量不会超过corePoolSize |
- 拒绝策略
| 策略 | 含义 |
|---|---|
| AbortPolicy策略 | 该策略会直接抛出异常,阻止系统正常工作 |
| CallerRunsPolicy策略 | 如果线程池的线程数量达到上限,该策略会把任务队列中的任务放在调用者线程当中运行 |
| DiscardOledestPolicy策略 | 该策略会丢弃任务队列中最老的一个任务,也就是当前任务队列中最先被添加进去的,马上要被执行的那个任务,并尝试再次提交 |
| DiscardPolicy策略 | 该策略会默默丢弃无法处理的任务,不予任何处理。当然使用此策略,业务场景中需允许任务的丢失 |