显示器是否无死锁?

时间:2016-05-03 16:29:50

标签: java concurrency

如果您在并发系统设计中使用监视器,这是否足以防止死锁?我知道在Java中有很多方法可以导致死锁,但这些示例实际上很少与监视器有关(大多数使用互斥锁)。

1 个答案:

答案 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);
    }
}