zoukankan      html  css  js  c++  java
  • 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个锁对象都是关闭的状态,都在等待别人释放资源(额,有点抽象!!!)

    那么如何解决呢?

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

  • 相关阅读:
    ubuntu上一些好的操作方式 习惯 文件备份
    ubuntu ufw 防火墙的设置
    ubuntu 的SSH 服务
    对一个数组的处理。
    ubuntu 的 crontab 计划任务
    django1.6 apache 项目部署.
    只此荒废的一个半个月。
    myeclipse python插件安装和环境配置(Windows7下)
    ubunt 12.04 64位 english 服务器版安装
    ubuntu sudo自动切换root 无需输入密码
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8968396.html
Copyright © 2011-2022 走看看