Is there any way to check if a given thread is sleeping?
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.
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");
}
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:
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.
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.