检测死锁的两种办法

一个简单的死锁图解:

检测死锁的两种办法_第1张图片

代码实现

public class DeadLockDemo {

    public static void main(String[] args) {
        Object object1 = new Object();
        Object object2 = new Object();

        new Thread(() -> {
            synchronized (object1) {
                System.out.println(Thread.currentThread().getName() + " 锁住了 object1, 想再锁住 object2");
                try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); }
                synchronized (object2) {
                    System.out.println(Thread.currentThread().getName() + " 锁住了 object2");
                }
            }
        }, "t1").start();

        new Thread(() -> {
            synchronized (object2) {
                System.out.println(Thread.currentThread().getName() + " 锁住了 object2, 想再锁住 object1");
                try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); }
                synchronized (object1) {
                    System.out.println(Thread.currentThread().getName() + " 锁住了 object1");
                }
            }
        }, "t2").start();
    }
}

检测死锁的两种办法_第2张图片

检测死锁的方式:

方式一:
IDEA的控制台输入jps -l (这个相当于Linux的ps -ef),得到如下结果:
检测死锁的两种办法_第3张图片
然后输入jstack 进程号,来查看死锁情况,这里的话是jstack 56492
检测死锁的两种办法_第4张图片
方式二:
win+R运行命令 jconsole
检测死锁的两种办法_第5张图片
然后
检测死锁的两种办法_第6张图片
同样也能看到死锁情况。

你可能感兴趣的:(java,开发语言)