ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线程面试必备:线程状态和dump输出状态,文末抽奖!

2021-03-20 21:51:48  阅读:195  来源: 互联网

标签:状态 dump 等待 死锁 WAITING 线程 文末


第一时间获取技术干货和业界资讯!

线程面试必备:线程状态和dump输出状态,文末抽奖!

☞ 免费CSDN资料帮下服务 | 免费加群 ☜

面试 Java,线程肯定是少不了的知识点。所以,学习它肯定是必须的,千万不能等到遇到采取才去学,那就晚了。

一般的定义一个线程,有 6 种状态。

线程面试必备:线程状态和dump输出状态,文末抽奖!

下面解释一下这 6 种状态。

new 代表新建状态;RUNNABLE 运行状态,就绪(ready)和运行中(running)两种状态笼统的称为“运行”;BLOCKED 阻塞状态,线程阻塞于锁;WAITING 等待状态,进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断);TIMED_WAITING 超时等待状态,该状态不同于WAITING,它可以在指定的时间后自行返回;TERMINATED 终止状态,表示该线程已经执行完毕。

线程面试必备:线程状态和dump输出状态,文末抽奖!

如果还有不懂的,可以看我的这篇文章《了解多线程,先从“图”了解线程的基本状态!》。

这 6 种状态看起来很好理解,但是再实际工作中,当程序出现异常后,你会发现堆栈中的状态和上面的状态不一样。

在 dump 文件里,各种线程状态解释如下:

  • 死锁,Deadlock(重点关注)

  • 执行中,Runnable

  • 等待资源,Waiting on condition(重点关注)

  • 等待获取监视器,Waiting on monitor entry(重点关注)

  • 对象等待中,Object.wait() 或 TIMED_WAITING

  • 暂停,Suspended

  • 阻塞,Blocked(重点关注)

  • 停止,Parked

关于上面提到的重点关注的几个状态,我简单介绍一下。

死锁 Deadlock 状态

线程面试必备:线程状态和dump输出状态,文末抽奖!

这是一个典型的死锁堆栈,t1 线程 lock 在地址 0x22a297a8,同时 t2 线程在 waiting to lock 这个地址。更有意思的是,堆栈也记录了发生死锁的代码行数,这对我们定位问题起到很大的帮助。

等待资源 Waiting on condition

最常见情况是该线程在 sleep,等待 sleep的时间到了时候,将被唤醒。关键字:TIMED_WAITING,sleeping,parking。TIMED_WAITING可能是调用了有超时参数的wait所引起的。parking指线程处于挂起中。

线程面试必备:线程状态和dump输出状态,文末抽奖!

如果堆栈信息明确是应用代码,则证明该线程正在等待资源。一般是大量读取某资源,且该资源采用了资源锁的情况下,线程进入等待状态,等待资源的读取。

线程面试必备:线程状态和dump输出状态,文末抽奖!

Waiting on monitor entry

意味着线程在等待进入一个临界区。Monitor 是 Java中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或者 Class的锁。每一个对象都有,也仅有一个 monitor。

这种状态通常发生在线程在等待数据库连接池返回一个可用的连接。

线程面试必备:线程状态和dump输出状态,文末抽奖!

Blocked

线程阻塞,是指当前线程执行过程中,所需要的资源长时间等待却一直未能获取到,被容器的线程管理器标识为阻塞状态,可以理解为等待资源超时的线程。如果线程处于 Blocked 状态,但是原因不清楚。可以使用 jstack -m pid 得到线程的 mixed 信息。

线程面试必备:线程状态和dump输出状态,文末抽奖!

例如,上面的信息表明,线程在尝试进入同步块时阻塞了。

以上内容,喜欢对大家的面试有所帮助。最后,我要强调一下。

当程序出现故障,往往一次 dump 的信息,还不足以确认问题。建议产生三次 dump 信息,如果每次 dump 都指向同一个问题,我们才确定问题的典型性。

堆栈信息只是一种参考,一些正常 RUNNING 的线程,由于复杂网络环境和 IO 的影响,也是有问题的,用 jstack 就无法定位,需要结合对业务代码的理解。

线程面试必备:线程状态和dump输出状态,文末抽奖!

上面是一个活动抽奖,一个鼠标垫!奖品大概下周邮寄!转发中奖概率更高哦!

标签:状态,dump,等待,死锁,WAITING,线程,文末
来源: https://blog.51cto.com/15127565/2666936

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有