JAVA 多线程-参数,队列,拒绝策略介紹

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

详细链接