Java线程的生命周期
# Java线程的生命周期
## 生命周期
<img src="https://oscimg.oschina.net/oscnet/up-e05d0c7dc77aaeb88c0ab9508be29251027.png" width=600 height=450 >
线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。
- 【 新建 】:就是刚使用new方法,new出来的线程;如:Thread t = new MyThread();
- 【 就绪 】:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;
- 【 运行 】:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;
- 【 阻塞 】:在运行状态的时候,可能因为某些原因导致运行状态的线程变成了阻塞状态,比如sleep()、wait()之后线程就处于了阻塞状态,这个时候需要其他机制将处于阻塞状态的线程唤醒,比如调用notify或者notifyAll()方法。唤醒的线程不会立刻执行run方法,它们要再次等待CPU分配资源进入运行状态;
- 【 销毁 】:如果线程正常执行完毕后或线程被提前强制性的终止或出现异常导致结束,那么线程就要被销毁,释放资源;
## Java多线程的就绪、运行和死亡状态
- 就绪状态转换为运行状态:当此线程得到处理器资源;
- 运行状态转换为就绪状态:当此线程主动调用 yield() 方法或在运行过程中失去处理器资源。
- 运行状态转换为死亡状态:当此线程线程执行体执行完毕或发生了异常。
此处需要特别注意的是:当调用线程的yield()方法时,线程从运行状态转换为就绪状态,但接下来CPU调度就绪状态中的哪个线程具有一定的随机性,因此,可能会出现A线程调用了yield()方法后,接下来CPU仍然调度了A线程的情况。