【发布时间】:2011-07-17 05:12:13
【问题描述】:
有什么方法可以检查给定线程是否正在休眠?
【问题讨论】:
-
我敢问你为什么需要这些信息?
-
是从您的代码中调用的 Thread.sleep()。知道线程正在睡觉你想要达到什么目的?
标签: java multithreading sleep
有什么方法可以检查给定线程是否正在休眠?
【问题讨论】:
标签: java multithreading sleep
我不确定是否有更好的方法,但是您可以在线程进入睡眠状态时更改变量并检查该变量是否线程处于睡眠状态。
【讨论】:
你可以调用Thread.getState(),查看状态是否为TIMED_WAITING。
注意,但是TIMED_WAITING 并不一定意味着调用sleep() 的线程,它也可能正在等待Object.wait(long) 调用或类似的调用。
【讨论】:
您可以创建自己的 sleep 方法,将 线程的 ID 记录到 全局变量 并将其用作睡眠线程的参考。
没有其他方法可以判断线程是否正在睡眠。
希望以下三个链接有所帮助:
【讨论】:
这是一个检查其他线程是否正在休眠的丑陋技巧(调用Thread.sleep):
public static boolean isSleeping(Thread t) {
StackTraceElement[] ste = t.getStackTrace();
return ste.length > 0
&& ste[0].getClassName().equals("java.lang.Thread")
&& ste[0].getMethodName().equals("sleep");
}
【讨论】:
我实际上并没有这样做,但是有一个 ThreadMXBean Interface 用于获取线程信息
它返回ThreadInfo Class,在那里你可能会用getWaitedTime方法得到一些东西。
【讨论】: