动态线程池管理

时间:2011-10-12 10:34:38

标签: java threadpool priority-queue

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

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

游泳池大小:100个主题。

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

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

1 个答案:

答案 0 :(得分:1)

您应该尝试以下策略:

  • 维护PriorityBlockingQueue,其中所有插入队列的项目都具有优先级字段,该字段是比较的基础。假设C类型的任务优先级为0,B级别为10,A级别为20(较低值=优先级较高)
  • 在PriorityBlockingQueue中维护活动B项的单独“跟踪”队列。一个单独的Timer实例尝试从PriorityBlockingQueue中删除所有B项,成功时它会减少B的优先级并将其重新插入PriorityBlockingQueue中 - 这样可以确保B类项目没有饥饿。不成功的尝试意味着该项已经被处理过该项目应从跟踪队列中删除。
  • 线程池中的线程在处理之前尝试弹出队列的元素。