美文网首页
死锁小结

死锁小结

作者: 枫叶忆 | 来源:发表于2019-06-14 20:18 被阅读0次

    死锁

    什么是死锁

    两个或两个以上的线程在执行过程中,因为争夺资源而造成一种相互等待的现象

    死锁的原因

    系统资源不足
    线程运行推进的顺序不合理
    资源分配不当

    手写死锁

    package com.hz.xhf;
    
    public class HoldLockThread implements Runnable {
    
        private String lockA;
        private 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() + "拿到" + lockB + "锁,尝试获取" + lockA + "锁");
                }
            }
        }
    }
    
    
    package com.hz.xhf;
    
    public class DeadLockTest {
        public static void main(String[] args) {
            String lockA = "lockA";
            String lockB = "lockB";
    
            new Thread(new HoldLockThread(lockA, lockB), "ThreadA").start();
            new Thread(new HoldLockThread(lockB, lockA), "ThreadB").start();
        }
    }
    

    解决死锁方法

    jps -l 定位进程号
    jstack XXX 查错

    相关文章

      网友评论

          本文标题:死锁小结

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