如何检查线程是否正在睡眠?
有没有办法检查给定的线程是否正在睡眠?
您可以调用Thread.getState()
并检查状态是否为TIMED_WAITING
。
注意,然而TIMED_WAITING
并不一定意味着该线程调用了sleep()
,它也可能在Object.wait(long)
调用或类似的东西中等待。
这是一个相当丑陋的黑客,检查其他线程是否正在hibernate:
public static boolean isSleeping(Thread t) { StackTraceElement[] ste = t.getStackTrace(); if (ste.length == 0) return false; // thread has terminated! return ste[0].getClassName().equals("java.lang.Thread") && ste[0].getMethodName().equals("sleep"); }
我不确定是否有更好的方法,但是当线程进入hibernate状态时你可以更改变量,如果线程正在hibernate则检查该变量。
您可以创建自己的sleep方法,将Thread的ID记录到全局变量中,并将其用作hibernate线程的参考。
没有其他方法可以判断一个线程是否正在hibernate。
希望以下三个链接有所帮助:
- 状态
- Java Doc 1
- Java Doc 2
我实际上并没有这样做,但是有一个ThreadMXBean接口用于获取线程信息
返回ThreadInfo类 ,你可能会得到一些getWaitedTime方法。