gpt4 book ai didi

java - Java 的可重入锁和死锁

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

有人可以用 Java 代码(伪)示例向我解释一下 Reentrant lockdeadlock 是如何相互关联的吗?

最佳答案

可重入锁定机制允许持有锁的线程重新进入临界区。这意味着您可以执行以下操作:

public synchronized void functionOne() {

// do something

functionTwo();

// do something else

// redundant, but permitted...
synchronized(this) {
// do more stuff
}
}

public synchronized void functionTwo() {
// do even more stuff!
}

在不可重入锁中,当您尝试从 functionOne() 调用 functionTwo() 时会出现死锁情况,因为线程必须等待锁……它自己持有。

死锁当然是线程1持有锁A等待锁B,线程2持有锁B等待锁A的恶性情况,两者都无法继续。此代码示例会造成死锁:

public synchronized void deadlock() throws InterruptedException {
Thread th = new Thread() {
public void run() {
deadlock();
}
}.start();

th.join();
}

调用线程试图等待生成的线程,而该线程在调用者退出之前不能调用 deadlock()。咔嚓!

关于java - Java 的可重入锁和死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470888/

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