4

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

this.exec = Executors.newSingleThreadExecutor();

现在我想知道它处理了多少工作,有多少在队列中(最重要的是!),以及基本上我能得到的所有信息。但是普通人ExecutorService没有这个信息。但是根据这个问题的答案,我可以将其类型转换为,ThreadPoolExecutor因为这就是它返回的内容。嗯,这听起来很容易……但有一个问题。我的机器不回来了ThreadPoolExecutor

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

那么如何才能知道我的状态ExecutorService呢?

如果您非常好奇并想知道我在使用我ExecutorService的什么(如果这很重要),请阅读我之前提出的这个问题。它基本上用于 SQL 语句。

4

1 回答 1

4

选项1

您可以创建自己的 ThreadPoolExecutor - 这就是newFixedThreadPool

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

然后,您可以保留对队列的引用以查看它有多满。您甚至可以传入一个修改后的版本,该版本会记录收到的作业数量。

选项 2

您可以使用可以ExecutorCompletionService帮助您知道任务何时完成的 —— 然后您可以计算您已提交的作业数/已完成的作业数。

于 2012-12-12T12:34:34.687 回答