找文章 / 找答案
精选问答 更多内容

[可视化] 线程的分析方式

王静静白银一 显示全部楼层 发表于 2021-4-13 18:40:20 |阅读模式 打印 上一主题 下一主题
线程的分析方式都有哪些???
回复

使用道具 举报

精彩评论1

Yonghong-Club 显示全部楼层 发表于 2021-4-13 19:24:32
常见的线程的分析方式:
在dump中,线程一般存在如下几种状态:
1、RUNNABLE,线程处于执行中
2、BLOCKED,线程被阻塞

3、WAITING,线程正在等待BLOCK是等待锁的线程(代码里可能含有synchronized),需要看该线程等待的线程在执行什么操作,如果持有锁的线程处于RUNNABLE则是正常行为(某些情况长时间RUNNABLE也是不正常行为,如执行一个简单sql数据库没有响应),如 果处于BLOCk,要继续查询下个锁的线程, 通常就是两种结果RUNNABLE和死锁。
Waiting是等待别人唤醒的线程,代码里主动调用了wait() 引起的, 需要notify()唤醒,比如,数据库连接池满了,新的获取数据库链接的线程会长时间处于waiting状态,直到现有使用连接池的connection关闭,会唤醒其中的waiting线程 继续执行,当线程长时间处于waiting状态,可能是需要重点关注分析的。
RUNNABLE是正在执行的线程。
有时全部线程都处于RUNNABL状态,需要多次打印比较线程的执行状态, 如果通过多次打印结果看到某个线程一直执行同一操作,如一直读取socket,一直在删除文件。
一般拿到线程信息,优先看block线程,block线程没问题时,这时通常一个个看,主要是看每个线程在干什么,通过这个干什么判断一些问题。


回复 支持 反对

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 免费注册

  • 官方微信

    欢迎关注永洪服务号!收费为0,价值无限

    扫码关注
  • 新浪微博

    让每位用户轻松挖掘数据价值!

    访问新浪微博
  • 智能客服
50W

会员等你来哦

Copyright   ©2012-2024  北京永洪商智科技有限公司  (京ICP备12050607) 京公网安备110110802011451号 |《永洪社区协议》
返回顶部