Java中死锁的检测
来源:互联网 发布:淘宝已购买的宝贝 编辑:程序博客网 时间:2024/06/10 01:23
死锁这个概念我相信大家都不陌生,现在的问题是在发生了死锁的时候我们怎么去检测死锁呢?
下面给出两种常用的方式来检测死锁。
我先给出一段运行在本地的死锁代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public
class
DeadLock {
public
static
final
Object lock1=
new
Object();
public
static
final
Object lock2=
new
Object();
public
static
void
main(String[] args){
Thread thread1=
new
Thread(
new
Runnable() {
@Override
public
void
run() {
synchronized
(lock1){
try
{
Thread.sleep(
1000
);
synchronized
(lock2){
System.out.println(
"线程1以获得锁1,正在获得锁2"
);
}
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
});
Thread thread2=
new
Thread(
new
Runnable() {
@Override
public
void
run() {
synchronized
(lock2){
try
{
Thread.sleep(
1000
);
synchronized
(lock1){
System.out.println(
"线程2以获得锁2,正在尝试获得锁1"
);
}
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread1.start();
thread2.start();
}
}
1.通过JConsole进行检测
运行JConsole命令后我们找到本地运行的进程,如图
找到本地进程后然后点击检测死锁,就可以看到死锁的线程了。在这次测试中我们可以看到发生死锁的两个线程是Thread-0和Thread-1.
这样我们就可以查看运行过程中可能出现的线程了。。。。。
血的教训:就在刚才我在写这个博客的时候死锁进程依然跑在博主的PC中,然后就是各种卡。。。。最后才意识到原来自己的死锁问题还没有解决。。。。所以。。。。死锁很严重,一旦发生之后会消耗很多资源的。
2.通过JPS与JStack命令结合来查看死锁
首先使用JPS命令找到模拟器正在运行的线程的PID,然后使用JStack查看线程的信息即可。 组后效果如下
从上图中我们就可以看到找到了死锁的线程分别是Thread-1和Thread-0两个线程。
通过以上总结我们总结了两种检测死锁的方法,两种方式的利弊并不是非常明显,所以选择也依靠个人爱好了。
0 0
- Java中死锁的检测
- java 线程死锁的检测
- Mysql-innodb中死锁检测的代码
- java死锁检测
- java死锁检测
- Java死锁检测
- rtmutex 的死锁检测
- rtmutex 的死锁检测
- Linux的死锁检测
- java中死锁的问题
- java中死锁的案例
- java中线程的死锁
- jps,jstack检测java死锁
- Java死锁示例及检测
- 死锁 死锁的检测 预防和避免
- java中死锁程序和解决死锁的办法
- 构成死锁的必要条件是什么?如何检测死锁,解除死锁?
- 浅谈linux的死锁检测
- Swift 学习指南
- MongoDB
- php乱码问题
- 字符编码
- NSInvocation传递多个参数
- Java中死锁的检测
- SUID、SGID详解
- SQL自定义函数 字符串截取 递归查询 以及一个小例子
- 第八周项目1—数组做数据成员(工资类 数组 文件)
- DNS 查找失败,因此找不到 ******* 的服务器
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]
- Android-多种进度条的使用方法
- linux grep命令详解
- SERVLET 学习笔记