java - 在Java中的静态 block 中创建线程时导致死锁

标签 java multithreading deadlock

我只是想在 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/

相关文章:

java - 2 个 vector 之间的欧氏距离实现

java - java中时间戳字符串转时间戳

multithreading - 线程和同步

goroutine 死锁 : In an app that reads from a blockchain and writes to rethinkdb, 有

c++ - 1.50 中的 boost::shared_mutex 问题

java - 如何避免数据库死锁

java - 通过 Gson 解析 json 字符串格式 = {TEST :[1, 2,3,4]}

java - 删除关系 OneToMany 双向记录?

java - 在 Java 7+ 的 EDT 之外使用 Swing repaint() 方法是否仍然安全?

python - 制作对象的非阻塞版本的 Pythonic 方法是什么?