线程的生命周期

线程的生命周期🍎

1.五个主要阶段🍏

①NEW

②RUNNABLE

③RUNNING

④BLOCKED

⑤TERMINATED

2.线程的NEW状态🍊

它只是Thread对象的状态,没有start之前,该线程根本不存在,与你用关键字new创建一个普通的Java对象没什么区别。

NEW状态通过start方法进入RUNNABLE状态。

3.线程的RUNNABLE状态🍋

​ ①线程对象调用start方法进入RUNNABLE状态,此时才是真正地在JVM进程中创建了一个线程。

​ ②线程的运行与否和进程一样都要听令于CPU的调度,所以把这个中间状态称为可执行状态(RUNNABLE),但并没有真正地执行起来而是在等待CPU的调度。

4.线程的RUNNING状态🍒

1.CPU通过轮询或者其它方式从任务可执行队列中选中了线程,那么此时才能真正地执行自己的逻辑代码,(注意:一个正在RUNNING状态的线程事实上也是RUNNABLE的,但反过来则不成立)。

2.状态转换:

​ ①直接进入TERMINATED状态,比如调用stop方法或者判断某个逻辑标识(JDK已经不推荐)

​ ②进入BLOCKED状态,比如调用了sleep()、或者wait()而进入了waitSet中

​ ③进行某个阻塞的IO操作,如网络数据的读写而进入了BLOCKED状态

​ ④获取某个资源,从而加入到该锁的阻塞队列中而进入了BLOCKED状态

​ ⑤CPU的调度轮询使该线程放弃执行,进入RUNNABLE状态

​ ⑥线程主动调用yeild方法,放弃CPU执行权,进入RUNNABLE状态

5.BLOCKED(阻塞)状态进入RUNNABLE状态🍇

​ ①阻塞操作结束,比如读到了想要的数据字节

​ ②线程完成了指定时间的休眠

​ ③Wait线程被其他线程notify/notifyall唤醒

​ ④获取到了某个锁的资源⑤线程在阻塞过程中被打断,比如其它线程调用了interrupt方法

​ 进入TERMINATED状态:

​ ①比如调用stop方法或者判断某个逻辑标识(JDK已经不推荐)

6.线程的TERMINATED状态🍉

​ ①线程运行正常结束,结束生命周期

​ ②线程运行出错意外结束

​ ③JVM Crash,导致所有的线程都结束

posted @ 2020-11-03 20:20  一个剃须机  阅读(136)  评论(0)    收藏  举报