一、线程的状态
线程一般有7个状态,但jdk中只规定了6种状态(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED、),因为它把READY状态归为了RUNNABLE,我们可以通过以下代码查看线程的状态
public class Test {
public static void main(String[] args) {
Thread.State[] arr=Thread.State.values();
for (Thread.State i:arr){
System.out.print(i+"、");
}
}
}
下面这幅图就讲述了线程一生可能会经历的状态(必然会经历的状态是NEW、RUNNABLE、TERMINATED)
- 当我们创建了一个线程的时候,这个线程就处于了NEW状态
- 调用了start方法后,该线程就处于了RUNNABLE(运行)状态
- 当线程在执行过程中排队执行synchronized 后,就处于BLOCKED(阻塞)状态
- 当线程获得synchronized 锁后,又回到RUNNABLE状态
- 当线程调用了wait方法后,就进入了WAITING(无线等待)状态
- 当调用了 notify/notifyAll 方法之后,线程会从 WAITING 状态变成 RUNNABLE 状态
- 当线程调用了sleep方法后,线程就会进入TIMED_WAITING(有时效等待)
- 当过了sleep方法规定的时间后,线程就会进入RUNNABLE 状态
- 线程执行完了之后,就会到达TERMINATED状态