天天看点

谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态

作者:Tom弹架构

谈谈对Java线程五种状态流转原理的理解。

今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态流转的原理的理解。小伙伴平时只关注过线程如何定义和使用,对于线程的状态流转脑海一片空白完全懵了。于是他找到我,先问我拍一期视频。今天我给大家分享一下我的理解。

·六大秘米里的文字版,我已经整理在二十万万的文档里面了,有需要的小伙伴可以在评论区领取。

·在回答线程扭转原理这个问题之前,先来回忆一下gdk 的三种自定义线程的方式以及它们的优点。

→第一种是继承实力的类,如代码所示。这种方式的优点是实现简单只需要去实现物化集成,它的外语就可以使用。它的缺点是扩展性不足,继承Tyava是单继承的语言,如果一个已经继承了其他类也就无法再通过这种方式去实现自定义线程。

→第二种是实现Runnable接口,如代码所示,它的优点是扩展性好,可以在这个基础上去继承其他类,非常适合多线程处理一份资源的场景。它的缺点是构造线程实例的过程相对繁琐一点。

→第三种是实现 core app 接口,如代码所示。它的优点是扩展性好,能够支持回调并且得到返回值,而且可以抛出受检异常。

→它的缺点是相对于实现Runnable接口的方式,调用的过程相对于繁琐一些。

·要理解线程状态流转的原理。首先看这一张图,这张图它涵盖了Java中多线程各种重要的知识点。如果掌握了这张图,Java中的多线程也就基本上掌握了。从图中可以看出线程的状态流转一共可以包括以下五个情形。

→第一种情形是新建状态,线程在创建以后就进入了新建状态。比如说去neW个线程。

→第二种情形就是线程状态,也被称为可执行状态。线程对象被创建以后,其他线程调用了线程的是start的方法,从而启动该这个时候线程就会处于就绪状态,它随时都可能被cpu去调度执行。

·第三种情形就是运行状态,就是指线程在获取cpu资源之后会正在运行。需要注意的是,县城只会从就绪状态记录到运行状态。

·第四种情形是阻塞状态,指线程会因为某种原因放弃cpu的使用权,大家会暂时停止运行,直到线程再次进入到就绪状态才会有机会转到运行状态。

阻塞又分为三种情况:

→第一种是等待阻塞,它只通过调用线程的 right 方法去让线程等待。

→第二种是同步阻塞,它是指线程在获取补给赖子的同步所的时候,因为所被其他线程所占用而导致获取失败,所以它会进入同步阻塞状态。

→第三种就是其他的阻塞情况,只通过调用线程的 sleep方法或者是join方法,又或者是发出了 io 的请求的时候,线程会进入到阻塞状态。只有等到sleep状态超时,就应等待线程终止或者超时以及 io处理完毕的时候,线程才会再次重新转入就绪状态。

·第五种情形就是死亡状态,它是指线程在执行完毕之后或者是因为异常退出了run方法,线程状态流转线程的生命就会结束了。

接下来我举一个通俗的例子来解释一下上面五种状态的扭转。

比如平时去商场上厕所,准备去上厕所的时候就是新建状态,上厕所可能排队,排队就是就绪状态,只要有坑位了,轮到你了。当去蹲坑的时候就是表示运行状态。当你蹲坑完毕之后发现没有手纸,需要等待其他人送纸过来。这种状态就是阻塞状态,等你上完厕所出来之后上厕所这件事就结束了,现在也就进入了死亡状态。需要注意的是,便秘也是一种阻塞状态。因为你便秘太久了,其他人可能会等不及,可能会把你赶走,这个时候你就会挂起。

·还有一种情况就是如果你便秘占坑位太久了,其他人可能会跟你说,先出去酝酿一下,五分钟以后再过来蹲坑,这就叫睡眠。

以上就是我对线程状态流转原理的理解。

我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请你动动手指一键三连,分享给更多的人,关注我面试不再难!

谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态
谈谈对Java线程五种状态流转原理的理解。今天有一位工作五年的小伙伴被问到这样一道面试题,说谈谈你对Java线程五种状态

继续阅读