如果您在并发系统设计中使用监视器,这是否足以防止死锁?我知道在Java中有很多方法可以导致死锁,但这些示例实际上很少与监视器有关(大多数使用互斥锁)。
答案 0 :(得分:-1)
可能会发生僵局,但你不太可能偶然发生这种情况,我花了10分钟思考一个可怕的角落案件。
在以下代码中,请注意删除" synchronized"将导致它终止。
public class Foo implements Runnable {
private Foo target;
private int count;
synchronized void go(int n) {
try {
if (n < 1) {
System.out.println("Got to the bottom.");
} else {
Foo f = new Foo();
f.target = this;
f.count = n;
Thread t = new Thread(f);
t.start();
t.join();
}
} catch (InterruptedException e) {
// Demo
}
}
@Override
public void run() {
target.go(count-1);
}
public static void main(String[] args) {
new Foo().go(1);
}
}