基础 | 并发编程 - [死锁]

@

目录

    制造一个死锁

    public class DeadlockDemo {
        public static void work(String lock1,String lock2){
            synchronized (lock1){
                System.out.println(Thread.currentThread().getName()+" has "+ lock1 + " wait for " + lock2);
                try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
                synchronized (lock2){
                    System.out.println(" had "+ lock2);
                }
            }
        }
    
        public static void main(String[] args) {
            new Thread(()->{
                work("1","2");
            },"AAA").start();
            new Thread(()->{
                work("2","1");
            },"BBB").start();
        }
    }
    

    现象
    在这里插入图片描述
    排查
    获取有问题的 java 进程的编号 jps -l
    在这里插入图片描述
    查看进程的栈信息 jstack 7976

    在这里插入图片描述
    也可以使用 jconsole 的排查死锁功能
    idea 工具配置
    需要配置环境变量和 path
    在这里插入图片描述

    posted @ 2025-05-20 14:32  问仙长何方蓬莱  阅读(6)  评论(0)    收藏  举报