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

本文探讨了Java中的线程死锁问题,死锁发生在两个或多个线程相互等待对方释放资源而无法继续执行的情况。通过一个DieLock.java的示例,展示了如何在代码中产生死锁。为了避免死锁,建议避免同步代码块的嵌套,并合理管理资源的获取和释放。理解死锁并采取预防措施对于多线程编程至关重要。
摘要由CSDN通过智能技术生成

线程同步之死锁问题

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

死锁问题多出现在 同步代码块的嵌套前提下 所以尽量避免 同步代码块的嵌套,
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锁!!");
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值