美文网首页
对于死锁的理解

对于死锁的理解

作者: 倚仗听江 | 来源:发表于2020-09-06 23:15 被阅读0次

    死锁是指两个或两个以上的线程因为争夺资源而造成的一种互相等待的现象,若无外力干涉,他们都将无法进行下去。

    死锁.png

    直接上代码吧,我们写一个死锁的示例

    class HoldLockThread implements Runnable {
    
        String lockA;
        String lockB;
    
        public HoldLockThread(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 {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockB) {
                    System.out.println(Thread.currentThread().getName());
                }
            }
        }
    }
    
    public class DeadLockDemo {
    
        public static void main(String[] args) {
            String lockA = "lockA";
            String lockB = "lockB";
    
            new Thread(new HoldLockThread(lockA,lockB),"AAA").start();
            new Thread(new HoldLockThread(lockB,lockA),"BBB").start();
        }
    }
    

    那万一发生了死锁我们怎么定位呢?
    首先我们可以用jps定位进程号


    jps定位进程号.png

    再用jstack找到死锁查看(用于生成虚拟机当前时刻的线程快照)


    jstack找到死锁查看.png

    相关文章

      网友评论

          本文标题:对于死锁的理解

          本文链接:https://www.haomeiwen.com/subject/srbhektx.html