Java线程的状态共分为6中:
1.NEW:安排了工作,还没开始行动。
创建了Thread对象,但是还没有调用start方法。系统内核里还没有线程。
2.RUNNABLE:可工作的,又可以分为正在工作中和即将开始工作。
就绪状态,正在CPU上运行或还没在CPU上运行。但是已经准备好了。
3.BLOCKED:排队正在等待锁,进入阻塞状态。
4.WAITING:排队等待其他事情,由于线程中调用了wait()进入阻塞状态。
5.TIMED_WAITING:排队等待其他事情,由于线程中通过sleep()进入阻塞状态。
6.TERMINATED:工作完成了。
系统里面的线程已经执行完毕,销毁了,(相当于线程的run执行完了),但是Thread对象还在。
public class demo13 {
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(()->{
System.out.println("hello thread");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
//在start()之前获取,获取到的是线程还未创建的状态。
System.out.println(t.getState());
t.start();
//在start()之前获取,获取到的是线程正在运行的状态。
System.out.println(t.getState());
Thread.sleep(500);
//Thread.sleep(500);获取到都是线程通过sleep()进入阻塞状态。
System.out.println(t.getState());
t.join();
//在join()后获取状态,获取都是线程已经结束的状态。
System.out.println(t.getState());
}
}
下面用一个图来理解: