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多线程死锁及死锁问题排查的主要内容,如果未能解决你的问题,请参考以下文章

Java死锁排查

JAVA死锁排查-性能测试问题排查思路

Java多线程死锁问题

使用Windbg分析多线程临界区死锁问题分享

使用Windbg分析多线程临界区死锁问题分享

20210519 使用jstack命令排查线程死锁问题