zoukankan      html  css  js  c++  java
  • 死锁

    什么是死锁

    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

    用代码实现一个死锁

    public class DeadLock {
        private static final Object lock1 = new Object();
        private static final Object lock2 = new Object();
    
        public static void main(String[] args) {
            new Thread(() -> {
                synchronized (lock1) {
                    System.out.println("获得lock1锁,尝试获得lock2");
                    synchronized (lock2) {
                        System.out.println("获得lock1,lock2");
                    }
                }
            }).start();
    
            new Thread(() -> {
                synchronized (lock2) {
                    System.out.println("获得lock2锁,尝试获得lock1");
                    synchronized (lock1) {
                        System.out.println("获得lock1,lock2");
                    }
                }
            }
            ).start();
        }
    }
    

      

    避免死锁的办法

    1.避免一个线程同时获取多个锁
    2.避免一个线程在锁内同时占用多个资源,尽量保证每个锁都只占用一个资源
    3.尝试使用定时锁,使用Lock.tryLock(timeout),来替代使用内部锁机制
    4.对于数据库锁,加锁解锁必须在一个数据库连接里,否则会出现解锁失败的情况

    列举死锁的经典例子及解决办法

    哲学家进餐问题

    哲学家进餐的代码实现

    这里在复习到操作系统时再来更博~

  • 相关阅读:
    java占位符应用
    【QuickHit项目实例】
    【那些年关于java多态应用】
    【那些年关于MyEclipse的快捷键大全】
    那些年【深入.NET平台和C#编程】
    关于《网络电视精灵》项目
    VS2013常用快捷键
    关于C#的继承结论
    关于【项目经理评分】项目的代码分析
    序列化和发序列化
  • 原文地址:https://www.cnblogs.com/Hangtutu/p/9197046.html
Copyright © 2011-2022 走看看