问题
Is there any way to check if a given thread is sleeping?
回答1:
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.
回答2:
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");
}
回答3:
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.
回答4:
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
回答5:
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.
来源:https://stackoverflow.com/questions/5336299/how-to-check-if-a-thread-is-sleeping