首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态线程池管理

动态线程池管理
EN

Stack Overflow用户
提问于 2011-10-12 10:34:38
回答 1查看 717关注 0票数 4

我有三种类型的任务A、B、C要在线程池中以最小阈值执行:

  • (A) 70 %
  • (B) 20 %
  • (C) 10 %

泳池大小: 100线。

如何确保在任何给定时间内分发以下内容:

  1. 没有空闲线程:例如,如果只存在C类型任务,则池将为100% C
  2. 没有饥饿:B和C任务最终将被服务
EN

回答 1

Stack Overflow用户

发布于 2012-04-28 06:26:05

您应该尝试以下策略:

  • 维护一个包含插入队列中的所有项的PriorityBlockingQueue,其中包含一个优先级字段,这是比较的基础。设C类任务优先级为0,B任务优先级为10,A任务优先级为20 ( ==值较低,优先级较高)
  • 在PriorityBlockingQueue中维护一个单独的活动B项的“跟踪”队列。一个单独的计时器实例试图从PriorityBlockingQueue中删除所有B项,如果成功,它将降低B的优先级并将其重新插入PriorityBlockingQueue --这将确保B类型的项目不会被饥饿。不成功的尝试意味着该项目已经被处理,该项目应该从跟踪队列中删除。
  • 线程池中的线程试图在处理队列之前弹出队列的一个元素。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7738723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档