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