hooyantsing's Blog

38_死锁排查

字数统计: 180阅读时长: 1 min
2020/08/30

38 死锁排查

狂神说Java JUC并发编程最新版通俗易懂

图解

案例

后面将通过工具排查死锁。

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
package deadelock;

import lombok.AllArgsConstructor;

import java.util.concurrent.TimeUnit;

public class Deadlock {
public static void main(String[] args) {
String lockA = "lockA";
String lockB = "lockB";

new Thread(new MyThread(lockA,lockB)).start();
new Thread(new MyThread(lockB,lockA)).start();
}
}

@AllArgsConstructor
class MyThread implements Runnable{

private String lockA;
private String lockB;

@Override
public void run() {
// 锁的是地址
synchronized (lockA){
System.out.println("get:" + lockA + "need:" + lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lockB){
System.out.println("get:" + lockB + "need:" + lockA);
}
}
}
}

排查死锁的方法

在控制台输入

jps -l 查找进程号。

jstack 进程号 查看堆栈信息。

CATALOG
  1. 1. 38 死锁排查
    1. 1.0.1. 图解
    2. 1.0.2. 案例
    3. 1.0.3. 排查死锁的方法