Поток может быть в нескольких состояниях:
NEW — мы создали поток, но еще не запустили. (запустить метод run)
RUNNABLE — мы выполняем поток
TERMINATED — поток запершен
Есть еще статусы: BLOCKED и WAITING
Для получения состояния потока используется метод getState:
Пример:

public class MyRun implements Runnable {
	private String message;
	private int sec;
	MyRun(String message, int sec) {
		this.message = message;
		this.sec = sec;
	}
	@Override
	public void run() {

		for (int i = 0; i < 10; i++) {
			try {
				Thread.sleep(sec);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(message);
		}
		
	}
	
}

Пример getState():

public class MyThread {

	public static void main(String[] args) throws Exception {	
		Runnable runnable = new MyRun("-1-", 300);
		Thread thread = new Thread(runnable);
		//NEW
		System.out.println(thread.getState());
		thread.start();
		//RUNNABLE
		System.out.println(thread.getState());		
				
		for (int i = 0; i < 20; i++) {
			System.out.println("--------2------");
			Thread.sleep(200);
		}		
			
		thread.join();
		//TERMINATED
		System.out.println(thread.getState());
		
		
	}
	
}

Вывод на консоль:
NEW
RUNNABLE
———2——
———2——
-1-
———2——
-1-
———2——
———2——
-1-
———2——
-1-
———2——
———2——
-1-
———2——
-1-
———2——
———2——
-1-
———2——
-1-
———2——
———2——
-1-
———2——
-1-
———2——
———2——
———2——
———2——
———2——
TERMINATED

Реклама