获取FinalizableDelegatedExecutorService的状态

时间:2012-12-12 01:33:19

标签: java multithreading executorservice

我正在使用此代码在java中获取ExecutorService

this.exec = Executors.newSingleThreadExecutor();

现在我想知道它处理了多少个工作,队列中有多少工作(最重要的是!),基本上我能得到的所有信息。但是普通的ExecutorService没有这个信息。但根据the answer in this question,我可以将它强制转换为ThreadPoolExecutor,因为这就是它返回的内容。嗯,这听起来很容易......但是有一个问题。 我的机器未返回ThreadPoolExecutor

相反,我得到一个java.util.concurrent.Executors$FinalizableDelegatedExecutorService,当试图对其进行类型转换时,这是不可能的,因为该类是不可见的。

那么如何才能找到ExecutorService的状态?

如果您非常好奇并希望了解我使用ExecutorService的内容(如果重要),请阅读我之前提到过的this question。它主要用于SQL语句。

1 个答案:

答案 0 :(得分:3)

选项1

您可以创建自己的ThreadPoolExecutor - 这是newFixedThreadPool的作用:

ExecutorService executor = new ThreadPoolExecutor(nThreads, nThreads,
                                  0L, TimeUnit.MILLISECONDS,
                                  new LinkedBlockingQueue<Runnable>());

然后,您可以保留对队列的引用,以查看它的完整程度。您甚至可以传递一个修改后的版本,该版本保留了收到的作业数量的计数器。

选项2

您可以使用an ExecutorCompletionService来帮助您了解任务何时完成 - 然后您可以计算已提交的工作数量/已完成的工作数量。