出于调试目的,我想监听线程状态。我希望它在线程等待日志以及“恢复”时打印通知。
问问题
1239 次
5 回答
1
鉴于您无法监听该变量private volatile int threadStatus;
,java.lang.Thread
因为该变量由本机代码管理,我能想到的唯一方法是拥有一个并行线程,该线程具有每 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 更改。
于 2018-11-21T19:10:24.703 回答
0
您可以扩展 Thread 类,并且在您的类中,您可以允许在您的类中注册一个侦听器,并且每次状态更改时,您的 Thread 都会通知它。这是可能的,但我认为这将成为非常复杂的解决方案,因为您必须确保代码中的所有线程都在使用您的类而不是常规线程。简而言之,恕我直言,这不值得
于 2016-09-01T14:37:15.207 回答
0
线程的 getState() 方法返回一个 Thread.State,它可以是:
新的、可运行的、阻塞的、等待的、TIMED_WAITING 或 TERMINATED
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-08-31T19:59:11.010 回答
0
于 2016-08-31T21:22:33.980 回答