首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java listen on Thread状态

Java listen on Thread状态
EN

Stack Overflow用户
提问于 2016-09-01 03:38:34
回答 5查看 1.2K关注 0票数 2

出于调试的目的,我想监听线程的状态。我想让它在线程等待日志和“恢复”时打印一个通知。

EN

回答 5

Stack Overflow用户

发布于 2018-11-22 03:10:25

鉴于您不能在java.lang.Thread上以that variable is managed by native code的身份监听private volatile int threadStatus;,我能想到的唯一方法就是使用一个并行线程,该线程的方法将每x毫秒/秒运行一次,并适当地输出。

代码语言:javascript
复制
// keep old values in a map like this
HashMap<Thread, ThreadStatus> threadMap;

// loop all threads
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
ArrayList<Thread> threadArrayList = new ArrayList<>(threadSet);
for (Thread thread : threadArrayList) {
    // check if thread.getState() has changed, update accordingly
}

请注意,除了效率不高的之外,您还会错过许多毫秒级的ThreadStatus更改

票数 1
EN

Stack Overflow用户

发布于 2016-09-01 03:59:11

线程的方法getState()返回一个Thread.State,它可以是:

新建、可运行、已阻止、正在等待、TIMED_WAITING或已终止

代码语言:javascript
复制
Thread.State state = getThreadInQuestion().getState();
if(state == Thread.State.WAITING) {
  System.out.println("Waiting");
} else if(state == Thread.State.RUNNABLE) {
  System.out.println("Running");
}else{
  System.out.println("Neither running nor waiting")
}
票数 0
EN

Stack Overflow用户

发布于 2016-09-01 05:06:15

我不认为有一个好的方法来‘编程’监控一个线程的状态。但是,您可以使用VisualVM等分析工具之一(还有许多其他工具,但我个人更喜欢这个工具)。

您还可以参考这个官方documentation,了解如何使用VisualVM监视应用程序的线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39257711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档