我正在使用此代码在java中获取ExecutorService
:
this.exec = Executors.newSingleThreadExecutor();
现在我想知道它处理了多少个工作,队列中有多少工作(最重要的是!),基本上我能得到的所有信息。但是普通的ExecutorService
没有这个信息。但根据the answer in this question,我可以将它强制转换为ThreadPoolExecutor
,因为这就是它返回的内容。嗯,这听起来很容易......但是有一个问题。 我的机器未返回ThreadPoolExecutor
!
相反,我得到一个java.util.concurrent.Executors$FinalizableDelegatedExecutorService
,当试图对其进行类型转换时,这是不可能的,因为该类是不可见的。
那么如何才能找到ExecutorService
的状态?
如果您非常好奇并希望了解我使用ExecutorService
的内容(如果重要),请阅读我之前提到过的this question。它主要用于SQL语句。
答案 0 :(得分:3)
选项1
您可以创建自己的ThreadPoolExecutor - 这是newFixedThreadPool
的作用:
ExecutorService executor = new ThreadPoolExecutor(nThreads, nThreads,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
然后,您可以保留对队列的引用,以查看它的完整程度。您甚至可以传递一个修改后的版本,该版本保留了收到的作业数量的计数器。
选项2
您可以使用an ExecutorCompletionService
来帮助您了解任务何时完成 - 然后您可以计算已提交的工作数量/已完成的工作数量。