线程的生命周期

线程的生命周期包括新生、就绪、运行、死亡和阻塞几个状态。

⚪首先我们回顾一下上一篇文章提到的线程的两个创建方法:
上一篇:
https://blog.csdn.net/weixin_45875049/article/details/104261285
一、继承Thread类
1.继承Thread。
2.重写run()方法。
3.用start()方法启动线程。
二、继承Runnable接口
1.继承接口。
2.重写run()方法。
3.新建Thread代理。
4.启动线程。

⚪新生状态

当在线程A中用new关键字创建一个写好的新线程(后称线程B)后,新线程进入新生状态

⚪就绪状态

当在线程A中用start关键字启动线程B后,线程B进入就绪状态,就绪状态的线程随时准备被赋予CPU使用权。

⚪运行状态

当线程B抢占到CPU使用权,run方法被执行,线程B进入运行状态,执行run方法中的代码。

⚪死亡状态和阻塞状态

如果线程B正常执行结束,或者调用了stop()方法停止执行,或者抛出了未捕获的异常时,程序会进入死亡状态

提示:调用stop方法已经过时了,不建议使用

阻塞状态是因为:如果遇到等待用户输入或者别的需要消耗时间的等待时,线程会让出CPU使用权。让出CPU使用权后,线程进入就绪状态,等待下次被CPU选中。

(●ˇ∀ˇ●)也就是不能占着茅坑不拉*嘛(●ˇ∀ˇ●)

关于线程的一生,有以下几点值得注意:

  1. 线程不知道什么时候会被选中执行。
  2. 遇到等待IO输入或者其他耗时操作后,由运行状态进入就绪状态,等待下次被CPU选中执行。
  3. 运行状态执行时,在给定的时间内run方法中的代码没有执行完毕就被别的线程抢走CPU使用权,或者因为别的原因进入就绪状态后,下次被选中之后会接着上次执行。