如何检查线程是否正在睡眠?

时间:2011-03-17 07:51:29

标签: java multithreading sleep

有没有办法检查给定的线程是否正在休眠?

5 个答案:

答案 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方法。