1、概念
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
概括来说:
  当前线程拥有其他线程需要的资源;
  当前线程等待其他线程已拥有的资源;
  都不放弃自己拥有的资源;

2、产生条件
1)互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放
2)请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。
3)不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用
4)循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

3、三种锁
(1)锁顺序死锁

package com;

public class LeftRightDeadlock {
    
    private final Object left = new Object();
    private final Object right = new Object();

    public void leftRight() {
        // 得到left锁
        synchronized (left) {
            // 得到right锁
            synchronized (right) {
                System.out.println("do something....");
            }
        }
    }

    public void rightLeft() {
        // 得到right锁
        synchronized (right) {
            // 得到left锁
            synchronized (left) {
                System.out.println("do something....");
            }
        }
    }

}
View Code

相关文章:

  • 2021-04-10
  • 2021-07-03
  • 2021-11-12
  • 2021-09-11
  • 2021-04-25
猜你喜欢
  • 2021-12-16
  • 2021-08-26
  • 2021-07-19
  • 2021-10-24
相关资源
相似解决方案