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

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

您可以调用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方法。