【发布时间】:2016-04-20 04:38:54
【问题描述】:
我有一个具有固定核心池大小的ThreadPoolExecutor 和一个LinkedBlockingQueue,用于在整个核心忙时必须等待的线程池任务。
假设所有核心线程当前都很忙,并且还有更多任务排入队列等待它们未来的执行。
我想检测当前正在等待的特定任务的队列位置。可以通过ThreadPoolExecutor.getQueue().toArray() 访问所有队列项目,但这些项目都是FutureTask 的实例。我无法访问包含的 Callable 成员,它可以提供足够的信息来识别我正在寻找的具体任务。
是否有现有的机制或方法来检测当前排队的所需任务的位置?
【问题讨论】:
-
我不知道任何现有的机制,但有一种方法很简单:数一数。提交时,使用计数器 A 的序列号标记每个任务,并在每个任务开始运行时立即递增计数器 B。简单的数学会告诉你队列中有多少任务,以及标签为 N 的任务的位置。
-
真是天才!谢谢@jameslarge!请将此提示添加为答案。最后,如果我的要求没有官方解决方案,那么我将接受您的回答。
标签: java multithreading threadpool blockingqueue