【问题标题】:Getting status of FinalizableDelegatedExecutorService获取 FinalizableDelegatedExecutorService 的状态
【发布时间】:2012-12-12 01:33:19
【问题描述】:

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

this.exec = Executors.newSingleThreadExecutor();

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

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

那么我怎样才能知道我的ExecutorService 的状态呢?

如果您非常好奇并想知道我使用我的ExecutorService 做什么(如果这很重要),请阅读我之前询问过的this question。它基本上是用于 SQL 语句的。

【问题讨论】:

    标签: java multithreading executorservice


    【解决方案1】:

    选项 1

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

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

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

    选项 2

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

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2021-12-18
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多