Java中线程的生命周期如图所示
它包含如下5个阶段。
- 新建
- 就绪
- 运行
- 阻塞
- 结束
其中阻塞阶段不一定会出现,它可能直接调用完成进入到结束状态,下面说下这5种状态的解释和状态转换。
5种状态
新建状态
程序调用new关键字创建一个线程的时候便是新建状态,关于Java中线程创建的几种方式请参考这里。
就绪状态
当程序调用start()方法便由新建状态转为就绪状态。这里不是run()方法,run()方法还是在主线程中执行,可以参考Java中多线程start()和run()方法的区别。
运行状态
由就绪状态到运行状态是获取到了cpu的执行权限,调用线程的run()方法。
阻塞状态
阻塞状态是由运行状态执行sleep()、wait()或者join()方法。
结束状态
结束状态是执行完成或者异常等结束。
状态转换
新建->就绪
调用线程的start()方法
就绪->运行
获取到了cpu的执行权限
运行->阻塞
调用sleep()、wait()、join()方法。
阻塞->就绪
sleep()时间片到,调用notify/notifyAll方法
运行->结束
执行完成、调用结束方法或者异常退出。
总结
关于线程的生命周期可以记住文章开头出的那个转换图即可。