Java基础-线程同步之死锁问题

线程同步之死锁问题

死锁问题:
线程间相互等待资源,而又不释放自身的资源,导致无穷无尽的等待,所以死锁问题是要避免的问题

死锁问题多出现在 同步代码块的嵌套前提下 所以尽量避免 同步代码块的嵌套,
Demo.java

public class Demo {
    //这样就会导致死锁
    public static void main(String[] args) {
        DieLck d1 = new DieLck(true);
        DieLck d2 = new DieLck(false);

        d1.start();
        d2.start();

    }
}

MyLock.java

public class Demo {
    
    public static void main(String[] args) {
        DieLck d1 = new DieLck(true);
        DieLck d2 = new DieLck(false);

        d1.start();
        d2.start();

    }
}

DieLock.java

public class DieLck extends Thread {
    public boolean flag ;

    public DieLck(boolean flag) {
        super();
        this.flag = flag;
    }

    @Override
    public void run() {
        if(flag){
            synchronized (MyLock.obj_A){
                System.out.println("if中的A锁!");
                synchronized (MyLock.obj_B){
                    System.out.println("if中的B锁!");
                }
            }
        }else{
            synchronized (MyLock.obj_B){
                System.out.println("else中的B锁!");
                synchronized (MyLock.obj_A){
                    System.out.println("else中的A锁!!");
                }
            }
        }
    }
}

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页