【问题标题】:Detect position of queued tasks in thread pool检测线程池中排队任务的位置
【发布时间】:2016-04-20 04:38:54
【问题描述】:

我有一个具有固定核心池大小的ThreadPoolExecutor 和一个LinkedBlockingQueue,用于在整个核心忙时必须等待的线程池任务。

假设所有核心线程当前都很忙,并且还有更多任务排入队列等待它们未来的执行。

我想检测当前正在等待的特定任务的队列位置。可以通过ThreadPoolExecutor.getQueue().toArray() 访问所有队列项目,但这些项目都是FutureTask 的实例。我无法访问包含的 Callable 成员,它可以提供足够的信息来识别我正在寻找的具体任务。

是否有现有的机制或方法来检测当前排队的所需任务的位置?

【问题讨论】:

  • 我不知道任何现有的机制,但有一种方法很简单:数一数。提交时,使用计数器 A 的序列号标记每个任务,并在每个任务开始运行时立即递增计数器 B。简单的数学会告诉你队列中有多少任务,以及标签为 N 的任务的位置。
  • 真是天才!谢谢@jameslarge!请将此提示添加为答案。最后,如果我的要求没有官方解决方案,那么我将接受您的回答。

标签: java multithreading threadpool blockingqueue


【解决方案1】:

我不知道任何现有的机制,但有一种方法很简单:数一数。

当您提交任务时,使用计数器 A 的序列号标记每个任务,并在每个任务开始运行时立即递增计数器 B。简单的数学会告诉你队列中有多少任务,以及标签为 N 的任务的位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多