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
顾名思义,就是线程运行完毕之后的状态,即将被回收资源。