【发布时间】:2011-07-14 06:17:54
【问题描述】:
我遇到了一个死锁场景,可以概括为如下所示的 StaticDeadlock 类。
这个简单的程序将在 o.getClass() 处冻结。这是我对发生的事情的猜测,但有人可以更好地解释一下吗?
1)程序进入StaticDeadlock静态块
2) 线程开始
3) 主线程等待线程完成,因此无法完成静态块
4) 在 thread 内部它访问 StaticDeadlock.o 但 StaticDeadlock 的静态块尚未完成。因此程序冻结了?
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();
}
}
}
【问题讨论】:
标签: java multithreading deadlock