账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么这个死锁问题删除static就造不成死锁?
    21
    0

    题目描述

    这段代码是可以执行的,但是我删除static Object o1 = new Object(), o2 = new Object();前面的static,死锁问题就没了,求解答?

    相关代码

    public class TestDeadLock implements Runnable {
        int flag = 1;
        static Object o1 = new Object(), o2 = new Object();
    
        public static void main(String[] args) {
            TestDeadLock tdl1 = new TestDeadLock();
            TestDeadLock tdl2 = new TestDeadLock();
            tdl1.flag = 0;
            tdl2.flag = 1;
            Thread t1 = new Thread(tdl1);
            Thread t2 = new Thread(tdl2);
            t1.start();
            t2.start();
        }
    
        @Override
        public void run() {
            System.out.println("flag:" + flag);
            if (flag == 0) {
                synchronized (o1) {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    synchronized (o2) {
                        System.out.println("0");
                    }
                }
            }
            if (flag == 1) {
                synchronized (o2) {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    synchronized (o1) {
                        System.out.println("1");
                    }
                }
            }
            
        }
    }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 和寂寞相愛り 普通会员 1楼

      死锁是指两个或多个进程相互等待对方释放资源的情况。当两个或多个进程同时进入一种资源的临界区,且都希望得到该资源,那么就会发生死锁。删除static并不会解决死锁问题。

      死锁问题的产生原因有多种,包括资源不均匀分配、资源竞争和死锁检测算法错误等。删除static不会改变资源的分配,因此不会改变导致死锁的原因。

      例如,如果A进程等待B进程释放资源,而B进程也等待A进程释放资源,那么就会发生死锁。而如果A进程删除static,那么它不再需要等待B进程释放资源,因此A进程就可以直接释放资源,避免了死锁。

      总的来说,删除static并不会解决死锁问题,因为死锁问题的发生是由资源不均匀分配、资源竞争和死锁检测算法错误等多种原因引起的。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部