• 38. 死锁


    死锁:
      出现死锁的原因:线程A等待线程B释放锁资源,同时线程B等待线程A释放资源

    可能出现死锁的情况:

      1.存在2个或者2个以上的线程

      2.存在2个或者2个以上的共享资源
     
    需求:

      有2个人要看电视,狗蛋有遥控器,张三有电池。只有电池和遥控器都有了才能看电视

    代码如下:

    class DeadLock extends Thread{
        
        public DeadLock(String name) {
            super(name);
        }
        
        @Override
        public void run() {
            if("张三".equals(Thread.currentThread().getName())) {
                synchronized ("电池") {
                    System.out.println("张三拿到了电池,准备去拿遥控器");
                    synchronized ("遥控器") {
                        System.out.println("张三拿到了遥控器,去看电视去了");
                    }
                }
            }else if("狗蛋".equals(Thread.currentThread().getName())){
                synchronized ("遥控器") {
                    System.out.println("狗蛋拿到了遥控器,准备去拿电池");
                    synchronized ("电池") {
                        System.out.println("狗蛋拿到了电池,去看电视去了");
                    }
                }
            }
        }
    }
    public class Demo6 {
        public static void main(String[] args) {
            DeadLock deadlock1 = new DeadLock("狗蛋");
            DeadLock deadlock2 = new DeadLock("张三");
            deadlock1.start();
            deadlock2.start();
        }
    }

    可以发现张三拿到了电池却怎么也拿不到遥控器,狗蛋拿到了遥控器却拿不到电池,都在等待对方释放资源,这样的结果就导致死锁

    分析原因:

        当张三拿到了电池时,同时狗蛋也拿到了遥控器。所以这2个锁对象都是关闭的状态,都在等待别人释放资源(额,有点抽象!!!)

    那么如何解决呢?

      默哀,根本没有解决方案,只有自己去避免发生

  • 相关阅读:
    内置对象
    js作用域对象与运用技巧
    js流程控制与函数
    JavaScript基础
    CSS3新增属性2
    CSS3新增
    前端实践
    浮动与定位
    页面布局
    表格表单视频音频
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8968396.html
Copyright © 2020-2023  润新知