从0到1理解JVM_线程状态

JAVA 中线程有5种状态:new/runable/waiting/blocked/terminated。

new

线程刚被创建,还没有被运行过

ready

从 new 到 ready,一个线程拥有了自己的内存等资源,随时可以被 CPU 调度进而运行。

running

正在运行的状态,拥有 CPU 的执行权,一个处于 running 状态的线程随时可以通过 yield 方法让出执行权,回到 ready 状态, 此时线程仍保留着锁,给更高级的线程运行的机会。

blocked

当一个线程调用了 Thread 的 sleep() 方法,该线程会带着所有对象的锁进入睡眠,直到到时,才回到 ready 状态。
当一个线程调用了对象的 wait() 方法,该线程便会主动放弃对象的锁,让别人先获取锁,直到收到 notify() 才再次去抢该对象的锁。
运行中的线程也有可能因为 IO 中断而进入阻塞状态,IO 完成后再回到 ready 状态。

terminated

顾名思义,就是线程运行完毕之后的状态,即将被回收资源。