请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于死锁

老师你好,我在敲代码的时候发现static 修饰的Object o1= new Object();这样修饰的锁才能出现死锁,如果o1,o2去掉static之后 就没办法出现死锁了,想知道这是为什么

正在回答 回答被采纳积分+3

1回答

悟空 2021-10-31 22:28:44

去掉static的话,大家用的就不是同一个锁对象了,所以不会死锁

0 回复 有任何疑惑可以回复我~
  • 提问者 歌颂者T #1
    DeadLock deadLock = new DeadLock(0);
            Thread threadA = new Thread(deadLock);
            deadLock.flag = 1;
            Thread threadB = new Thread(deadLock);
            threadA.start();
            threadB.start();
    
    老师你好 我是这样创建的 并没有创建两个实例,因为我知道加了static之后,o1 o2属于类不属于实列对象的,是因为发生了指令重排导致的吗?因为在deadLock.flag = 1;这句代码好像被优化了
    回复 有任何疑惑可以回复我~ 2021-11-01 10:12:32
  • 悟空 回复 提问者 歌颂者T #2
    麻烦你把所有代码都贴一下,我看一下
    回复 有任何疑惑可以回复我~ 2021-11-01 12:07:12
  • 提问者 歌颂者T 回复 悟空 #3
    public class DeadLock implements Runnable {
        Object o1 = new Object();
        Object o2 = new Object();
        int flag = 0;
    
        public DeadLock(int flag) {
            this.flag = flag;
        }
    
        public static void main(String[] args) {
            DeadLock deadLock = new DeadLock(0);
            deadLock.flag = 0;
            Thread threadA = new Thread(deadLock);
            deadLock.flag = 1;
            Thread threadB = new Thread(deadLock);
            threadA.start();
            threadB.start();
        }
    
        @Override
        public void run() {
            System.out.println(flag);
            if (flag == 0) {
                synchronized (o1) {
                    System.out.println("I have got O1,then I will get o2");
                    synchronized (o2) {
                        System.out.println("i have get o2");
                    }
                }
            }
            if (flag == 1) {
                synchronized (o2) {
                    System.out.println("I have got O2,then I will get o1");
                    synchronized (o1) {
                        System.out.println("i have get o1");
                    }
                }
            }
    
        }
    }
    回复 有任何疑惑可以回复我~ 2021-11-01 14:09:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信