Есть ли способ проверить, спал ли данный поток?
Как проверить, спал ли поток?
Ответ 1
Вы можете вызвать Thread.getState()
и проверить, находится ли состояние TIMED_WAITING
.
Обратите внимание, однако, что TIMED_WAITING
не обязательно означает, что поток, называемый sleep()
, он также может ждать в Object.wait(long)
или что-то подобное.
Ответ 2
Вот довольно уродливый взлом, чтобы проверить, спал ли другой поток:
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
Я не уверен, есть ли лучший способ, но вы можете изменить переменную, когда поток переходит в спящий режим и проверяет эту переменную, если нить спала или нет.
Ответ 4
Вы можете создать свой собственный метод sleep, который записывает Идентификатор потока в глобальную переменную и использует ее как ссылку для спящего потока.
Нет другого способа узнать, действительно ли поток спал.
Надеемся на три ссылки ниже:
Ответ 5
Я на самом деле не сделал этого, но там ThreadMXBean Interface для получения потока Info
который возвращает ThreadInfo Class, вы можете получить что-то с помощью метода getWaitedTime.