死锁

什么是死锁

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

用代码实现一个死锁

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.对于数据库锁,加锁解锁必须在一个数据库连接里,否则会出现解锁失败的情况

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

哲学家进餐问题

哲学家进餐的代码实现

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

 

posted @ 2018-06-19 09:02  KristinLee  阅读(147)  评论(0编辑  收藏  举报
jQuery火箭图标返回顶部代码