デッドロックシナリオは、以下に示すStaticDeadlockクラスとして要約できます。スタティックブロック内のthread.join()によるデッドロック
この単純なプログラムは、 o.getClass()でフリーズします。何が起こったのか私の推測ですが、誰かがそれをよりよく説明できますか?
1)プログラムはStaticDeadlock静的ブロックに入る
2)スレッド開始
3)メインスレッドはスタティックを終えることができないため、終了するスレッド待ちに置かれ
4)スレッドそれアクセス StaticDeadlock.o 内部しかしStaticDeadlockの静的ブロックがnブロックまだ完了していません。したがって、プログラムはフリーズしますか?
public class StaticDeadlock
{
private static final Object o = new Object();
static {
MyThread thread = new MyThread();
thread.start();
try {
thread.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main (String[] args)
{
System.out.println("all is well.");
}
static class MyThread extends Thread
{
@Override
public void run()
{
System.out.println("inside mythread");
o.getClass();
}
}
}