Как проверить, спал ли поток?

Есть ли способ проверить, спал ли данный поток?

Ответ 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.