[死锁] 手写一个死锁,并且判断是否是死锁

package com.lomonkey.synchronize;

/**
 * @author Lvdoudou
 * @date 2023/6/1 0001 0:47
 * @description 编写一个死锁
 */
public class DeadLockDemo {

    static final Object o1 = new Object();
    static final Object o2 = new Object();

    public static void m1() {
        synchronized (o1) {
            System.out.println(Thread.currentThread().getName() + "获取到o1锁");
            synchronized (o2) {
                System.out.println(Thread.currentThread().getName() + "获取到o2锁");
            }
        }
    }


    public static void m2() {
        synchronized (o2) {
            System.out.println(Thread.currentThread().getName() + "获取到o2锁");
            synchronized (o1) {
                System.out.println(Thread.currentThread().getName() + "获取到o1锁");
            }
        }
    }

    public static void main(String[] args) {

        new Thread(() -> {
            m1();
        }, "A").start();
        new Thread(() -> {
            m2();
        }, "B").start();
    }
}

第一种方法使用 jpsjstack分析`

Lvdoudou@Lomonkey MINGW64 /e/P-project/2023/study/JavaUtilConcurrent/untitled/src/main/java/com/lomonkey/synchronize (master)
$ jps
11204 RemoteMavenServer36
17012 
6340 Jps
29336 DeadLockDemo
29912 Launcher
Lvdoudou@Lomonkey MINGW64 /e/P-project/2023/study/JavaUtilConcurrent/untitled/src/main/java/com/lomonkey/synchronize (master)
$ jstack 29336

Java stack information for the threads listed above:
===================================================
"B":
     at com.lomonkey.synchronize.DeadLockDemo.m2(DeadLockDemo.java:27)
     - waiting to lock <0x000000076c30cf38> (a java.lang.Object) # 这里等待 cf38这个对象
     - locked <0x000000076c30cf48> (a java.lang.Object) # 这里锁住了cf48
     at com.lomonkey.synchronize.DeadLockDemo.lambda$main$1(DeadLockDemo.java:38)
     at com.lomonkey.synchronize.DeadLockDemo$$Lambda$2/939047783.run(Unknown Source)
     at java.lang.Thread.run(Thread.java:750)
"A":
     at com.lomonkey.synchronize.DeadLockDemo.m1(DeadLockDemo.java:17)
     - waiting to lock <0x000000076c30cf48> (a java.lang.Object)# 这里等待cf48
     - locked <0x000000076c30cf38> (a java.lang.Object)#这里锁住了 cf38
     at com.lomonkey.synchronize.DeadLockDemo.lambda$main$0(DeadLockDemo.java:35)
     at com.lomonkey.synchronize.DeadLockDemo$$Lambda$1/396180261.run(Unknown Source)
     at java.lang.Thread.run(Thread.java:750)

Found 1 deadlock.


第二种使用jconsole窗口查看

	选择我们要查看的进程

在这里插入图片描述

点击不安全的链接在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值