我只是想在 Java 的 static
block 中创建一个线程,这导致了死锁的发生。代码片段如下。
package deadlock;
final public class Main
{
static int value;
static
{
final Thread t = new Thread()
{
@Override
public void run()
{
value = 1;
}
};
t.start();
System.out.println("Deadlock detected");
try
{
t.join();
}
catch (InterruptedException e)
{
System.out.println(e.getMessage());
}
System.out.println("Released");
}
public static void main(String...args)
{
//Java stuff goes here.
}
}
它只是在控制台上显示检测到死锁 并挂起。我猜测发生死锁的原因可能是 static
block 在调用 main()
方法之前先加载。你能从上面的代码片段中看出死锁的确切原因吗?
最佳答案
为了让线程能够设置静态值,类必须被加载。为了加载类,线程必须结束(以便静态 block 完成)。这可能就是您陷入僵局的原因。
关于java - 在Java中的静态 block 中创建线程时导致死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610369/