JUC 死锁

一、案例

package com.wt.lock;


import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadDemon02 {

    public static void main(String[] args) {
        Lock lock1 = new ReentrantLock();
        Lock lock2 = new ReentrantLock();

        new Thread(()->{
            try {
                lock1.lock();
                System.out.println(Thread.currentThread().getName()+">>拿到锁1, 需要锁2");
                try {
                    lock2.lock();
                    System.out.println(Thread.currentThread().getName()+">>拿到锁2");
                } finally {
                    lock2.unlock();
                }

            } finally {
                lock1.unlock();
            }

        }, "AA").start();

        new Thread(()->{
            try {
                lock2.lock();
                System.out.println(Thread.currentThread().getName()+"<<拿到锁2,需要锁1");

                try {
                    lock1.lock();
                    System.out.println(Thread.currentThread().getName()+"<<拿到锁1");
                } finally {
                    lock1.unlock();
                }
            } finally {
                lock2.unlock();
            }
        },"BB").start();
    }
}

二、判断

 

终端输入命令

Jps -l   查看死锁信息列表

Jstack  号码  查看详细信息

 

posted @ 2025-05-31 10:05  市丸银  阅读(7)  评论(0)    收藏  举报