我有一个ThreadPoolExecutor
具有固定核心池大小和LinkedBlockingQueue
用于线程池任务,如果整个核心忙,则必须等待。
假设所有核心线程当前都处于繁忙状态,并且队列中还有其他任务正在等待将来执行。
我想检测当前正在等待的特定任务的队列位置。可以通过ThreadPoolExecutor.getQueue().toArray()
访问所有队列项,但这些项都是FutureTask
的实例。我无法访问包含的Callable
成员,该成员将提供足够的信息来识别我正在寻找的具体任务。
是否有现有的机制或方法来检测当前排队的有用任务的位置?
答案 0 :(得分:0)
我不知道任何现有机制,但有一种方法很简单:计算它们。
在提交时,用计数器A中的序列号标记每个任务,并在每个任务开始运行时立即递增计数器B.简单的数学将告诉您队列中有多少任务,以及标签为N
的任务的位置