【问题标题】:How to monitor status of all threads created by executor service如何监控执行器服务创建的所有线程的状态
【发布时间】:2020-05-25 23:20:38
【问题描述】:

有没有办法检查执行器服务创建的所有线程的状态。假设我有 20 个线程。我将如何检查所有这些的状态?

【问题讨论】:

  • 为什么需要知道状态?
  • 只是检查一下,是否正在运行,是否崩溃等
  • 但是为什么?请记住,您使用的是线程池,因此它可以为您处理线程。
  • 我只是好奇是否有类似 getState() 方法来检查状态
  • 我不知道。并且不需要一个 IMO。线程池为你管理线程,这是线程池的重点。反映状态的方法无法达到目的。

标签: java multithreading executorservice java-threads


【解决方案1】:

如果你真的想监控线程池中所有线程的状态,你可以尝试创建你的 ThreadFactory,如下代码:

public class SelfThreadFactory implements ThreadFactory {
    private Map<Long, Thread> stateMap = new ConcurrentHashMap<>();

    @Override
    public Thread newThread(Runnable r) {
        Thread thread = new Thread(r);
        stateMap.put(thread.getId(), thread);
        return thread;
    }

    public Map<Long, Thread> getStateMap() {
        return stateMap;
    }
}

使用getStateMap()方法可以得到这个ThreadFactory创建的所有线程,然后就可以得到线程的状态了。

【讨论】:

  • 请记住,@NotNull 不是 Java SE 的一部分。
  • @VGR 谢谢,@NotNull 是我的想法,我已经修改了代码。
【解决方案2】:

您可以扩展ThreadPoolExecutor 并使用其方法beforeExecute(Thread t, Runnable r)afterExecute(Runnable r, Throwable t) 来监控任务/线程的状态。

你可以找到一个示例实现in this article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多