java 查看线程死锁
那我们怎么确定一定是死锁呢?有两种方法。
1>使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打开。
1)连接到需要查看的进程。
2)打开线程选项卡,然后点击左下角的“检测死锁”
3)jconsole就会给我们检测出该线程中造成死锁的线程,点击选中即可查看详情:
从上图中我们可以看出:
①在线程Thread-1中,从状态可以看出,它想申请Paper这个资源,但是这个资源已经被Thread-0拥有了,所以就堵塞了。
②在线程Thread-0中,从状态可以看出,它想申请Pen这个资源,但是这个资源已经被Thread-1拥有了,所以就堵塞了。
Thread-1一直等待paper资源,而Thread--一直等待pen资源,于是这两个线程就这么僵持了下去,造成了死锁。
2>直接使用JVM自带的命令
1)首先通过 jps 命令查看需要查看的Java进程的vmid,如图,我们要查看的进程TestDeadLock的vmid号是7412;
2)然后利用 jstack 查看该进程中的堆栈情况,在cmd中输入 jstack -l 7412 ,移动到输出的信息的最下面即可得到:
至此,相信大家都会看了吧,具体就不说啦,根据输出,找到问题所在的代码,开始调试解决即可啦。
java 查看线程死锁的更多相关文章
- java 查看线程的信息
的代码上加上 断点 运行 进入Terminal jps 查看进程号 jstack 进程号 查看线程的信息 jstack pid 此时进去DEBUG 端F9 跑完程序 再回到Terminal 中 就能 ...
- java查看线程的堆栈信息
通过使用jps 命令获取需要监控的进程的pid,然后使用jstack pid 命令查看线程的堆栈信息. 通过jstack 命令可以获取当前进程的所有线程信息. 每个线程堆中信息中,都可以查看到线程ID ...
- Java多线程:线程死锁
发生死锁的原因通常是两个对象的锁相互等待造成的. 以下用一个实例来构造这样的情况: package basic.e_deadlock; import org.apache.log4j.Logger; ...
- Java线程死锁查看分析方法
如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...
- java命令分析线程死锁以及内存泄漏
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript. 1. 现象::主程序卡住无反应,多行任务不往下执行 1 2. 原因::使用j ...
- java 线程死锁的检测
java 线程死锁的检测 例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...
- jstack+jdb命令查看线程及死锁堆栈信息
如果程序挂死,有时使用jstack查看进程中线程信息时,需要添加上-F参数,此时如果有死锁信息,则可能不会打印出死锁堆栈信息,使用jdb则可以查看当前死锁线程的运行堆栈. 如下模拟一个简单的死锁程序 ...
- Java虚拟机性能管理神器 - VisualVM(9) 排查JAVA应用程序线程死锁【转】
Java虚拟机性能管理神器 - VisualVM(9) 排查JAVA应用程序线程死锁[转] 标签: javajvm监控工具性能优化 2015-03-11 19:59 1948人阅读 评论(0) 收藏 ...
随机推荐
- 听闻 kubernetes,快速了解一番
看到 各位 大厂都在用这个, 而本人最多是用yarn 做些ML的事情, 赶快了解一下, 先扫盲记录一下. 一.名称趣闻 kubernetes缩写为k8s, 阿哈 ,原来是:k8s,意思就是k后面 ...
- php获取客户端IP地址的方法
参考:https://www.cnblogs.com/rendd/p/6183094.html <?php function getip() { //strcasecmp 比较两个字符,不区分大 ...
- python和C++联合调试
python可以利用SO的方式去调用C++中的函数,但是需要一种调试方案来进行python和C++的联合调试,效果是直接在c++代码中打断点,然后python在进行c++so调用的时候,直接进入到断点 ...
- python中字符串前的r什么意思
Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码.如果要指定编码方式,可在文件 ...
- Mac 终端Terminal光标移动快捷键
声明: 转载自: http://blog.csdn.net/lgm252008/article/details/8253519 在Mac系统中并没有Home.End等键,所以在使用时并不是特别的顺手, ...
- git踩过的坑
一.git 解决fatal: Not a git repository 我用git add file添加文件时出现这样错误: fatal: Not a git repository (or any o ...
- 自己动手在win2003系统中添加虚拟网卡
运用虚拟网卡我们可以更好地使用我们的网络,那么在win2003中该怎么操作呢?下面就为大家介绍下具体的步骤 虚拟网卡是用软件来实现虚拟的网卡,通过运用虚拟网卡我们可以更好地使用我们的网络.但是虚拟 ...
- Goland常用快捷键
文件相关快捷键: CTRL+E,打开最近浏览过的文件. CTRL+SHIFT+E,打开最近更改的文件. CTRL+N,可以快速打开struct结构体. CTRL+SHIFT+N,可以快速打开文件. 代 ...
- 基金 、社保和QFII等机构的重仓股排名评测
基金前15大重仓股持仓股排名 基金重仓前15大个股,相较于同期沪深300的平均收益, 近1月:2.45%, 近3月:10.0%, 近1年:11.22%, 近3年:105.23%. 1,中国平安(SH6 ...
- 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
sql脚本: SELECT TableName then d.name else '' end,---表名 TableShowsThat then isnull(f.value,'') else '' ...