有没有办法检查给定的线程是否正在休眠?
答案 0 :(得分:18)
您可以拨打Thread.getState()
并检查状态是否为TIMED_WAITING
。
请注意,TIMED_WAITING
并不一定意味着该帖子称为sleep()
,它也可能正在等待Object.wait(long)
来电或类似的事情。
答案 1 :(得分:3)
这是一个相当难看的黑客,检查其他线程是否正在休眠:
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");
}
答案 2 :(得分:0)
我不确定是否有更好的方法,但是当线程进入休眠状态时你可以更改变量,如果线程正在休眠则检查该变量。
答案 3 :(得分:0)
您可以创建自己的 sleep 方法,将线程的ID 记录到全局变量,并将其用作休眠线程的参考。< / p>
没有其他方法可以判断一个线程是否准确睡眠。
希望下面的三个链接帮助:
答案 4 :(得分:0)
我实际上并没有这样做,但是有一个ThreadMXBean Interface来获取线程信息
返回ThreadInfo Class,你可能会得到一些getWaitedTime方法。