高频面试题-请说一下线程的生命周期!-阿里云开发者社区

开发者社区> Ijiran> 正文

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

简介: 这算是一个关于线程的基础问题了,但是依然很多面试官还是会问一下,倘若这个问题就卡住了,通过的几率就大打折扣了。当一个线程在创建、启动之后,并不是紧接着去执行代码块,这其中有一个过程,也就是一个线程开始到结束的一个生命周期了。全网其实有着两个版本的生命周期解释,大同小异。
+关注继续查看

五种状态

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

六种状态

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

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

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

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

先上图!d055753f2bc8768e6b74c4d359179aa.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线程的状态和生命周期
​ 上图是一个线程的生命周期状态流转图,很清楚的描绘了一个线程从创建到终止的过程。 这些状态的枚举值都定义在java.lang.Thread.State下 NEW:毫无疑问表示的是刚创建的线程,还没有开始启动。
833 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9948 0
Java线程的生命周期(转)
Java线程的生命周期   一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正运行其中的程序代码。
846 0
java线程学习2——线程的生命周期
    该图摘自《疯狂的java讲义》,该书讲述的线程很详细。   其中新建状态和死亡状态的线程的isAlive属性均返回false,值得注意的是对死亡的线程调用start方法或 对新建的线程调用两次start 方法均会抛出illegalThreadStateException异常。  
953 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
11808 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13694 0
JAVA面试题 线程的生命周期包括哪几个阶段?
JAVA面试题 线程的生命周期包括哪几个阶段?面试官:您知道线程的生命周期包括哪几个阶段? 应聘者: 线程的生命周期包含5个阶段,包括:新建、就绪、运行、阻塞、销毁。 新建:就是刚使用new方法,new出来的线程; 就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,...
812 0
+关注
86
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载