gpt4 book ai didi

java - 这怎么会导致死锁呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:01 24 4
gpt4 key购买 nike

我正在复习我的 Java 在练习中被问到这个问题。以下如何导致死锁?

private Object sync = new Object();

public void methodA() throws InterruptedException {
synchronized(this.sync) {
Thread.sleep(1000);
}
}

public void methodB() throws InterruptedException {
synchronized(this.sync) {
this.methodA();
}
}

我的猜测是,如果 methodB 在 Thread.sleep 函数运行时调用 methodA,这两个方法将开始级联并导致无限期 hibernate ?

想法?

最佳答案

不,这不会导致死锁。

要创建死锁,需要两个Threadab以及两个资源xy。如果 a 持有 x 的锁并且还需要 y 的锁,但是 b 持有 的锁code>y 并且还需要锁定x,然后发生死锁。

这里只有一件事要锁定,this.sync,所以不会发生死锁。

如果在另一个线程调用methodA 时进入methodB,那么它会等到methodA 释放锁之后再继续。如果在另一个线程调用了 methodB 时进入了 methodA,那么它会一直等到 methodB 释放锁之后再继续。请注意,methodB 调用 methodA 的事实并不重要,因为它与 this.sync 上的锁相同。

关于java - 这怎么会导致死锁呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26642696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com