检测排队任务在线程池中的位置

Detect position of queued tasks in thread pool

我有一个 ThreadPoolExecutor 具有固定的核心池大小和一个 LinkedBlockingQueue 线程池任务,如果整个核心都忙,则必须等待。

假设所有核心线程当前都处于忙碌状态,并且有更多任务排入队列等待未来执行。

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

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

我不知道任何现有机制,但有一种方法非常简单:计算它们。

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

的任务的位置