Вы можете узнать, в каком состоянии находится поток, используя метод getState (), который возвращает Enum of Thread.States. Поток может находиться только в одном из следующих состояний в данный момент времени.
NEW Свежий поток, который еще не начал выполняться.
RUNNABLE Поток, который выполняется на виртуальной машине Java.
BLOCKED Поток, который заблокирован в ожидании блокировки монитора.
WAITING Поток, ожидающий уведомления другим потоком.
TIMED_WAITING Поток, ожидающий уведомления другим потоком в течение определенного времени.
TERMINATED Поток, метод выполнения которого завершен.
Thread t = new Thread();
Thread.State e = t.getState();
Thread.State[] ts = e.values();
for(int i = 0; i < ts.length; i++){
System.out.println(ts[i]);
}