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

时间:2016-01-14 18:02:56

标签: java multithreading threadpool blockingqueue

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

假设所有核心线程当前都处于繁忙状态,并且队列中还有其他任务正在等待将来执行。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

的任务的位置