我们可以说以下代码是死锁的一个例子

时间:2013-02-05 14:30:10

标签: java multithreading

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

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中的wait方法是原生的,我无法获得更多信息。

1 个答案:

答案 0 :(得分: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最终确定它并不会死锁。 ;)