theme: jzman
这是我参与更文挑战的第21天,活动详情查看: 更文挑战。
上篇文章讲到线程的几种创建方式,本篇文章来全面的分析一下线程的生命周期。
一、问题
再介绍线程的生命周期之前,我们先来仔细想想几个问题。
- 线程的生命周期状态有哪些,状态流程是怎么样的?
TIME-WAITING
与WAITING
区别是什么?BLOCKED
与*WAITING
状态区别是什么?sleep
、wait
、join
、yield
几个函数执行对线程分别影响是什么?
带着这些问题,继续往下看吧。
二、线程的生命周期
线程从创建到销毁整个生命周期,一共有六个状态。包括:
NEW
初始状态,线程被创建,但未执行START
之前,该状态扭转到状态RUNNABLE
后,不可能再回到此状态。A thread that has not yet started is in this state.
RUNNABLE
运行状态,运行状态实际上内部包含了两种子状态,一个是就绪,另一个是运行。A thread executing in the Java virtual machine is in this state.
BLOCKED
阻塞状态,独特的等待状态,特指等待锁。阻塞状态代表线程放弃了CPU
的使用权,进入了等待状态。A thread that is blocked waiting for a monitor lock is in this state.
TIME-WAITING
超时等待状态,超时以后自动返回。一个线程在特定的等待时间内等待另一个线程执行动作会产生。A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
WAITING
等待状态,无超时的等待状态。一个线程在等待另一个线程执行动作会产生。A thread that is waiting indefinitely for another thread to perform a particular action is in this state.
TERMINATED
终止状态,代表线程执行完成,是线程的终态。A thread that has exited is in this state.
这个图全面反应了从线程创建NEW
状态到线程结束TERMINATED
状态各个状态流转的条件,无需做过多的解释,具体调用的函数请看Java
官方文档。
哥佬倌,莫慌到走!觉好留个赞,探讨上评论。欢迎关注面试专栏面时莫慌 | Java并发编程,面试加薪不用愁。也欢迎关注我,一定做一个长更的好男人。