-1

我曾尝试使用以下代码,这似乎是一个死锁场景

public class MyThread {

    public static void main(String[] args) {
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

但我怀疑情况并非如此。这不是僵局。我的理解是Main线程正在等待自己的完成。我已经深入研究了它,但是 join 中的等待方法是本机的,我无法获得更多信息。

4

1 回答 1

2

来自维基百科

“僵局是指两个或多个相互竞争的动作都在等待对方完成的情况,因此永远都不会。”

在这种情况下,您正在等待线程完成,而该线程正在等待任务完成。虽然您只有一个线程,但恕我直言,仍然存在死锁。

仅供参考,看看您是否可以在此代码中发现死锁。

public class Main {
    static String HI = "Hello World";

    static {
        Thread t = new Thread() {
            @Override
            public void run() {
                System.out.println(HI);
            }
        };
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public static void main(String... args) {
    }
}

顺便说一句,如果你做HI最后它不会死锁。;)

于 2013-02-05T14:36:39.213 回答