Java线程池类ThreadPoolExecutor

先弄清楚几个关键角色:

corePoolSize:运行线程池大小

maximumPoolSize:最大线程池大小

关系主体:任务(task)、队列(queue)、线程(thread

专用语:无界(没有容量限制的)

 

排队机制

·当运行时线程小于corePoolSize时,为新进入的任务创建线程。

·当存在>=corePoolSize的线程运行时,新进入任务进入队列;

·当队列大小达到queue size的时候,为新进入的任务创建线程,直到线程数量也达到了最

大值maximumPoolSizes.

·当队列和线程都达到最大值的时候,拒绝新进入的任务。

 

通过设置corePoolSizemaximumPoolSizesqueue size的大小或设置为有界、无界,实现以下排队策略

1.       直接传送(Direct handoffs

前提条件:无界队列(SynchronousQueue);无界线程池(unbounded maximumPoolSizes

机制:为新来的任务马上创立新的线程,队列不保存任何一个新进入的任务。对于任何新到来的任务没有拒绝机制。

2.       无绑定队列(Unbounded queues

前提条件:无界队列(for example a LinkedBlockingQueue without a predefined capacity);有界线程池(bounded corePoolSize

机制:1.当运行时线程小于corePoolSize时,为新进入的任务创建线程;

2. 当存在=corePoolSize的线程运行时,新进入的任务全部进入队列。队列的大小没有限制,因此运行中的线程包括(idle状态线程)数量不会超过corePoolSize。此时,maximumPoolSizes没有任何作用。

 

3.       绑定队列(Bounded queues

前提条件:有界队列(for example, an ArrayBlockingQueue);有界线程池(bounded corePoolSize

机制:与排队机制一致。通过调节Queue sizes maximum pool sizes,可以使得策略倾向于少CPU等资源消耗低任务吞吐量,还是高CPU消耗高任务吞吐量。

综上,不同的策略有不同的结果影响。

Queue sizesmaximum pool sizes可导致低资源消耗,低吞吐量,可能低于操作系统本有的吞吐能力,造成资源的浪费。

小Queue sizes大maximum pool sizes可能导致CPU过忙,可能导致系统崩溃,也会影响吞吐量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值