出于调试的目的,我想监听线程的状态。我想让它在线程等待日志和“恢复”时打印一个通知。
发布于 2018-11-22 03:10:25
鉴于您不能在java.lang.Thread上以that variable is managed by native code的身份监听private volatile int threadStatus;,我能想到的唯一方法就是使用一个并行线程,该线程的方法将每x毫秒/秒运行一次,并适当地输出。
// 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更改。
发布于 2016-09-01 03:59:11
线程的方法getState()返回一个Thread.State,它可以是:
新建、可运行、已阻止、正在等待、TIMED_WAITING或已终止
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")
}发布于 2016-09-01 05:06:15
我不认为有一个好的方法来‘编程’监控一个线程的状态。但是,您可以使用VisualVM等分析工具之一(还有许多其他工具,但我个人更喜欢这个工具)。
您还可以参考这个官方documentation,了解如何使用VisualVM监视应用程序的线程。
https://stackoverflow.com/questions/39257711
复制相似问题