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



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

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

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

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

我不知道

任何现有的机制,但有一种方法很简单:计算它们。

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

最新更新