-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内のwaitメソッドはネイティブであり、それ以上の情報を得ることができません。

4

1 に答える 1

2

ウィキペディアから

「デッドロックとは、2つ以上の競合するアクションがそれぞれ、他方が終了するのを待っている状況であり、したがって、どちらも終了しません。」

この場合、スレッドが終了するのを待っており、そのスレッドはタスクが完了するのを待っています。スレッドは1つしかありませんが、デッドロックのIMHOがあります。

参考までに、このコードでデッドロックを見つけることができるかどうかを確認します。

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 に答える