有人可以用 Java 代码(伪)示例向我解释一下 Reentrant lock
和 deadlock
是如何相互关联的吗?
最佳答案
可重入锁定机制允许持有锁的线程重新进入临界区。这意味着您可以执行以下操作:
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/