谈谈你对Java线程5种状态流转原理的理解
今天,有位工作5年的小伙伴被问到这样一道面试题,说谈谈你对Java线程5种状态流转原理的理解。当时,平时只关注过线程如何定义和使用,对于线程状态流转脑海一片空白,完全懵了。于是找到我,希望我拍一期视频。
今天,我给大家分享一下我的理解。
1、线程定义
回答线程流转原理这个问题之前,我们先来回忆一下JDK中3种自定义线程的方式以及它们的优缺点。
ENTER TITLE
第1种:是继承Thread类。如代码所示:
public class MyThread extends Thread{
public void run(){
// to do something
}
}
这种方式的优点是:实现简单,只需实例化继承类的实例,即可使用线程。
它的缺点是:扩展性不足,Java是单继承的语言,如果一个类已经继承了其他类,就无法通过这种方式实现自定义线程
ENTER TITLE
第2种:是实现 Runnable 接口,如代码所示:
public class MyThread implements Runable{
public void run(){
// to do something
}
}
它的优点是:扩展性好,可以在此基础上继承其他类,非常适合多线程处理一份资源的场景
它的缺点是:构造线程实例的过程相对繁琐一点
ENTER TITLE
第3种:是实现Callable接口,如代码所示:
public class MyThread implements Callable<String>{
public String call() throws Exception{
// to do something
return null;
}
}
它的优点是:扩展性好,能支持回调并得到返回值,而且可以抛出受检查异常。
它的缺点是:相较于实现Runnable接口的方式,调用过程较为繁琐。
2、线程状态流转原理
首先来看这样一张图,它涵盖了Java 中多线程各重要知识点。如果掌握了此图,Java 中的多线程也就基本上掌握了。
ENTER TITLE
从图中可以看出,线程状态的流转,一共包括以下 5 种情形:
ENTER TITLE
1. 新建状态(New): 线程对象创建后,就进入了新建状态。例如,Thread thread = new Thread()。
ENTER TITLE
2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了线程的start()方法,从而来启动该线程。这个时候,线程处于就绪状态,它随时可能被CPU调度执行。
ENTER TITLE
3. 运行状态(Running): 是指线程获取CPU资源后,正在运行。需要注意的是,线程只能从就绪状态进入到运行状态。
ENTER TITLE
4. 阻塞状态(Blocked): 是指线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
那么,阻塞又分为三种情况:
1) 等待阻塞,指通过调用线程的wait()方法,让线程等待。
2) 同步阻塞 ,指线程在获取synchronized同步锁时,因为锁被其它线程所占用而导致获取失败,会进入同步阻塞状态。
3) 其他阻塞,是指通过调用线程的sleep()方法 或者 join()方法 又或者 发出了I/O请求的时候,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
ENTER TITLE
5. 死亡状态(Dead): 是指线程执行完毕或者因异常退出了run()方法,线程结束生命周期。
ENTER TITLE
ENTER TITLE
举个通俗一点的例子来解释上面五种状态,比如我们平时去商场上厕所,准备去上厕所就是新建状态(new),上厕所要排队,排队就是就绪状态(Runnable),有坑位了,轮到你了,蹲坑就是运行状态(Running),蹲完坑发现没有手纸,需要等待其他人送纸过来,这个状态就是阻塞(Blocked),等上完厕所出来,上厕所这件事情结束了线程也就不存在了,就是死亡状态。
需要注意的是:便秘也是阻塞状态,你便秘太久,其他人会等不及,可能会把你赶走,这个就是挂起。还有一种情况就是,如果你便秘占坑位太久,其他人跟你说,先出去酝酿一下,5分钟后再过来蹲坑,这就叫睡眠。
好了,以上就是我对线程状态流转原理的理解。
相关文章
- 多云架构下,JAVA微服务技术选型实例解析
- JAVA已过气?中俄大佬对话告诉你俄罗斯最受欢迎的编程语言是什么!
- Acrobat最经典的版本:PDF编辑器Acrobat 2021经典版,下载
- Adobe Acrobat Pro DC 2019(PDF) 软件下载安装包教程(附下载方法)
- Adobe Acrobat Pro DC 2018(PDF) 软件下载安装包教程(附下载方法)
- 仅需1% Embedding参数,硬件成本降低十倍,开源方案单GPU训练超大推荐模型
- 文件更小,质量更高,大火的Stable Diffusion还能压缩图像?
- 11分钟充电70%,华人教授在锂电池中加镍箔登上Nature
- 戴着VR头盔教机器人抓握,机器人当场就学会了
- 还未入职,这位将来的博导为学生规划了一条高效学习之路
- 英特尔i9-13900K重夺PC性能桂冠:与AMD 7950X拉开8%差距
- 价值1亿美金时,Stable Diffusion背后的团队开始互撕,谁才是真官方?
- NeurIPS 2022 | 用变分编码器生成周期图,时间、空间复杂度最低
- Bengio、LeCun 等人联名上书,呼吁美国投资神经AI,攻破「具身图灵测试」
- 30亿跑赢GPT-3的1750亿,谷歌新模型引热议,然而却把Hinton年龄搞错了
- Stable Diffusion新玩法,一句话帮你换图,网友魔改《戴珍珠耳环的少女》长这样
- LeCun转推,PyTorch GPU内存分配有了火焰图可视化工具
- ECCV 2022 | 摆脱部件标签依赖,上科大&ZMO.AI提出分部件3D人体重建与驱动新方法UNIF
- 清华作者排名第一,多人中稿超十篇:NeurIPS 2022统计数据出炉
- Transformer作者离职创业的公司,想从老东家谷歌再拿2亿美元融资