Java中死锁的检测
2016-04-19 17:24
330 查看
死锁这个概念我相信大家都不陌生,现在的问题是在发生了死锁的时候我们怎么去检测死锁呢?
下面给出两种常用的方式来检测死锁。
我先给出一段运行在本地的死锁代码:
?
1.通过JConsole进行检测
运行JConsole命令后我们找到本地运行的进程,如图
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/18/fac1612471cddf150dec30102183a555.png)
找到本地进程后然后点击检测死锁,就可以看到死锁的线程了。在这次测试中我们可以看到发生死锁的两个线程是Thread-0和Thread-1.
这样我们就可以查看运行过程中可能出现的线程了。。。。。
血的教训:就在刚才我在写这个博客的时候死锁进程依然跑在博主的PC中,然后就是各种卡。。。。最后才意识到原来自己的死锁问题还没有解决。。。。所以。。。。死锁很严重,一旦发生之后会消耗很多资源的。
2.通过JPS与JStack命令结合来查看死锁
首先使用JPS命令找到模拟器正在运行的线程的PID,然后使用JStack查看线程的信息即可。 组后效果如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/18/e64e93125cafecc6e034d534c87f110f.png)
从上图中我们就可以看到找到了死锁的线程分别是Thread-1和Thread-0两个线程。
通过以上总结我们总结了两种检测死锁的方法,两种方式的利弊并不是非常明显,所以选择也依靠个人爱好了。
下面给出两种常用的方式来检测死锁。
我先给出一段运行在本地的死锁代码:
?
运行JConsole命令后我们找到本地运行的进程,如图
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/18/fac1612471cddf150dec30102183a555.png)
找到本地进程后然后点击检测死锁,就可以看到死锁的线程了。在这次测试中我们可以看到发生死锁的两个线程是Thread-0和Thread-1.
这样我们就可以查看运行过程中可能出现的线程了。。。。。
血的教训:就在刚才我在写这个博客的时候死锁进程依然跑在博主的PC中,然后就是各种卡。。。。最后才意识到原来自己的死锁问题还没有解决。。。。所以。。。。死锁很严重,一旦发生之后会消耗很多资源的。
2.通过JPS与JStack命令结合来查看死锁
首先使用JPS命令找到模拟器正在运行的线程的PID,然后使用JStack查看线程的信息即可。 组后效果如下
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/18/e64e93125cafecc6e034d534c87f110f.png)
从上图中我们就可以看到找到了死锁的线程分别是Thread-1和Thread-0两个线程。
通过以上总结我们总结了两种检测死锁的方法,两种方式的利弊并不是非常明显,所以选择也依靠个人爱好了。
相关文章推荐
- Oracle外键不加索引引起死锁示例
- SQL2005查看死锁存储过程sp_who_lock
- SQL2008中SQL应用之- 死锁(Deadlocking)
- 详解SQL死锁检测的方法
- C#中lock死锁实例教程
- 记一次公司仓库数据库服务器死锁过程及解决办法
- 利用sys.sysprocesses检查SqlServer的阻塞和死锁
- 深入浅出解析mssql在高频,高并发访问时键查找死锁问题
- 讲解Oracle数据库中结束死锁进程的一般方法
- PHP 解决session死锁的方法
- Mysql 数据库死锁过程分析(select for update)
- 查找MySQL线程中死锁的ID的方法
- MySQL Innodb表导致死锁日志情况分析与归纳
- 简单说明Oracle数据库中对死锁的查询及解决方法
- Oracle删除死锁进程的方法
- Oracle数据表中的死锁情况解决方法
- Oracle对于死锁的处理方法
- MSSQL产生死锁的根本原因及解决方法
- MySQL中由load data语句引起死锁的解决案例
- 如何捕获和记录SQL Server中发生的死锁