我遇到了一个死锁场景,可以概括为下面显示的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();
}
}
}