java多线程死锁及死锁问题排查
Posted 500年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程死锁及死锁问题排查相关的知识,希望对你有一定的参考价值。
java多线程-死锁及死锁问题排查
1、死锁是什么
2、死锁测试
import java.util.concurrent.TimeUnit;
public class DeadLockDemo {
public static void main(String[] args) {
String lockA = "A";
String lockB = "B";
new Thread(new MyThread2(lockA, lockB)).start();
new Thread(new MyThread2(lockB, lockA)).start();
}
}
class MyThread2 implements Runnable {
private String lockA;
private String lockB;
public MyThread2(String lockA, String lockB) {
this.lockA = lockA;
this.lockB = lockB;
}
@Override
public void run() {
synchronized (lockA) {
System.out.println(Thread.currentThread().getName() + " 锁" + lockA + " -> 想拿锁" + lockB);
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized (lockB) {
System.out.println(Thread.currentThread().getName() + " 锁" + lockB + " -> 想拿锁" + lockA);
}
}
}
}
3、解决死锁
3.1、jps命令
使用 jps -l
定位进程号
3.2、jstack命令
使用 jstack 进程号
找到死锁
3.3、问题排查方法
1、日志;
2、堆栈;
特别鸣谢:狂神说Java老师的无私奉献
.
.
.
上一篇 java多线程(十一) CAS原子引用AtomicReference
下一篇 java多线程(十三)Condition精准通知唤醒
以上是关于java多线程死锁及死锁问题排查的主要内容,如果未能解决你的问题,请参考以下文章