线程池中的任务队列

workQueue

上篇讲到Java核心的几个线程池都是对ThreadPoolExecutor类的封装,该类的构造方法中有个参数为workQueue

该参数是指被提交但未执行的任务队列,它是一个BlockingQueue接口的对象,用于存放Runable对象。根据功能分类,在ThreadPoolExecutor类的构造函数中可使用以下几种BlockingQueue接口。

  • 直接提交的队列:该功能有SynchronousQueue对象提供。使用该对象,提交的任务不会被真实的保存,而总是将新任务提交到线程执行,没有空闲线程时,则尝试创建新的线程,如果线程数量已经达到最大值,则执行拒绝策略。
  • 有界的任务队列:该功能由ArrayBlockingQueue提供。使用该对象时,若有新任务需要执行,如果线程池的实际线程数少于corePoolSize,则会优先创建新的线程,若大于,则会将新任务加入到等待队列。当队列满时,则在总线程数不大于maximumPoolSize的前提下,创建新的线程执行任务。
  • 无界的任务队列:该功能有LinkedBlockingQueue类实现。使用该对象时,除非系统资源耗尽,否则不存在入队失败的情况。当有新任务来时,若系统的线程数量小于corePoolSize,线程池会生成新的线程执行,当线程数达到corePoolSize时就不会再继续增加了,而是将任务加入到等待队列,该队列会保持无限增长。
  • 优先任务队列:该功能由PriorityBlockingQueue实现。该类是一个特殊的无界队列。ArrayBlockingQueue和LinkedBlockingQueue都是按照先进先出处理任务,而该类则可以根据任务自身的优先级顺序先后执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值