死锁简要笔记

suaxi
2021-02-23 / 0 评论 / 85 阅读 / 正在检测是否收录...

死锁

死锁测试实例:

package com.sw.lock;

import java.util.concurrent.TimeUnit;

/**
 * @Author suaxi
 * @Date 2021/2/22 23:48
 * 死锁Demo
 */
public class DeadLockTest {
    public static void main(String[] args) {
        String lockA = "lockA";
        String lockB = "lockB";
        new Thread(new DeadLock(lockA,lockB),"A").start();
        new Thread(new DeadLock(lockB,lockA),"B").start();
    }
}

class DeadLock implements Runnable{

    private String lockA;
    private String lockB;

    public DeadLock(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(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (lockB){
                System.out.println(Thread.currentThread().getName()+"--->现在的锁是:"+lockB+",想获取的资源是:"+lockA);
            }
        }
    }
}


解决思路:

1、jps -l查看进程号

1.jps查看进程号.png


2、jstack 进程号查看具体的死锁信息

2.jstack查看死锁的具体信息.png

0

评论 (0)

取消