gpt4 book ai didi

java - 动态线程池管理

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:51 25 4
gpt4 key购买 nike

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

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

池大小:100 个线程。

如何保证在任何给定时间内分配如下:

  1. 无空闲线程:例如,如果仅存在 C 类任务,池将 100% 为 C 类
  2. 没有饥饿:B 和 C 任务最终会得到服务

最佳答案

您应该尝试以下策略:

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

关于java - 动态线程池管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7738723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com