高频面试题-请说一下线程的生命周期!

Posted Javachichi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高频面试题-请说一下线程的生命周期!相关的知识,希望对你有一定的参考价值。

这算是一个关于线程的基础问题了,但是依然很多面试官还是会问一下,倘若这个问题就卡住了,通过的几率就大打折扣了。

下面一起来看一下吧!

当一个线程在创建、启动之后,并不是紧接着去执行代码块,这其中有一个过程,也就是一个线程开始到结束的一个生命周期了。

全网其实有着两个版本的生命周期解释,大同小异。

五种状态

一种说法是五种状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞状态(Blocked)、线程死亡(Dead)。

六种状态

另一种说法是六种状态,分别是新建(New)、就绪/运行(Runnable)、结束(Terminated)、阻塞状态(Blocked)、等待(Waiting)、超时等待(Time_Waiting)。

注:这里的就绪/运行(Runnable),其实就包括了Running运行中状态和Ready就绪状态。

无论是五种还是六种,其实都很清楚的说明了一个线程从生到死的一个过程,而面试官问出的这个问题当然是不会这么简单了,这里还隐藏着一个更重要的点,那就是这些状态可以通过哪些方法进行相互切换,下面接着来看一下吧。

在这里我就不说五种状态的了,因为发现流程图笔记里面躺着一个六种状态的流程图,今天就着重说一下六种状态说法下的状态切换吧。

先上图!

1.png

图例解释

  1. 线程从New状态到Runnable状态,是通过Thread.start()方法进行切换的,这也是线程启动的第一步。

  2. 从Runnable状态到Blocked状态,需要线程执行代码块时产生锁,或者进行IO请求时,线程就会切换成阻塞状态;当锁被释放,或者IO请求完成时,线程就会从Blocked状态切换回Runnable状态了。

  3. 从Runnable状态到Waiting状态,需要线程代码块中调用wait()方法,使当前线程进行等待操作;当调用notify()方法,或者notifyAll()方法时,线程就会从Waiting状态切换回Runable状态了。

  4. 从Runnable状态到Time_Waiting状态,需要线程代码块中调用sleep()方法,因为sleep方法需要传一个时间的参数,所以这里一旦执行就会使当前线程进行一段时间的等待;只需要等待时间超时,线程就会从Time_Waiting状态切换回Runnable状态了。

  5. 从Runnable状态到Terminated状态,是最好理解的,就是代码执行完成后,就会切换到这个状态,也预示着这个线程的消亡,而线程一旦执行完成,也就会被线程池收回,或者直接销毁。

关于线程池的知识,之后可以细聊一下,今天就到这了,这次的知识虽然基础,但是一样重要,无论是面试还是日常工作都不可或缺,希望大家共同成长,打好基础。

最后

以下是Java面试1—到5年以上开发必问到的面试问点,也都是一线互联网公司Java面试必备技能,下面是参照阿里年薪50W所需具备的技能图,大家可以参考下!
在这里插入图片描述

同时针对这12个技能,我在这整理了一份Java架构进阶面试专题PDF文档(含450题解析,包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发,设计模式,MySQL等知识点解析,内容丰富,图文结合!)

蚂蚁金服Java研发岗三面:MySQL+秒杀+Redis+JVM等(终获offer)
这份专题文档是免费分享的,有需要的朋友可以看向下面来获取!!

需要完整版文档的小伙伴,可以一键三连,下方获取免费领取方式!
在这里插入图片描述

以上是关于高频面试题-请说一下线程的生命周期!的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序高频面试题——精选一

Android 高频面试题整合(内含参考答案)

京东前端高频react面试题及答案

京东前端高频react面试题及答案

京东前端高频react面试题及答案

京东前端高频react面试题及答案