How to check if a thread is sleeping?

后端 未结 5 496
旧时难觅i
旧时难觅i 2020-12-17 17:13

Is there any way to check if a given thread is sleeping?

相关标签:
5条回答
  • 2020-12-17 17:41

    i didn't actually did it , but there's an ThreadMXBean Interface for getting thread Info

    which returns ThreadInfo Class, there you might get something with getWaitedTime method.

    0 讨论(0)
  • 2020-12-17 17:44

    Here is an fairly ugly hack to check if the other thread is sleeping:

    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");
    }
    
    0 讨论(0)
  • 2020-12-17 17:44

    You could create your own sleep method which records the Thread's ID to a global variable and use it as reference for sleeping thread.

    There's no other way you can tell if a thread is precisely sleeping.

    Hope the three links below help:

    • States
    • Java Doc 1
    • Java Doc 2
    0 讨论(0)
  • 2020-12-17 17:55

    You can call Thread.getState() on and check if the state is TIMED_WAITING.

    Note, however that TIMED_WAITING doesn't necessarily mean that the thread called sleep(), it could also be waiting in a Object.wait(long) call or something similar.

    0 讨论(0)
  • 2020-12-17 18:04

    I am not sure if there is a better way but you could change a variable when a thread goes to sleep and check that variable if the thread is sleeping or not.

    0 讨论(0)
提交回复
热议问题