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并发编程,面试加薪不用愁。也欢迎关注我,一定做一个长更的好男人。
本文详细剖析了Java线程的六个生命周期状态:NEW、RUNNABLE、BLOCKED、TIME_WAITING、WAITING和TERMINATED,并阐述了各状态间的转换。重点关注了线程的阻塞、超时等待和无限期等待的区别,以及sleep、wait、join、yield等函数对线程状态的影响。适合Java并发编程学习者和面试备考者阅读。
&spm=1001.2101.3001.5002&articleId=120134770&d=1&t=3&u=d9b158b308734332b3c4802896be208b)
5946

被折叠的 条评论
为什么被折叠?



