相关疑难解决方法(0)

由静态块中的thread.join()引起的死锁

我遇到了一个死锁场景,可以概括为下面显示的StaticDeadlock类.

这个简单的程序将冻结在o.getClass().这是我对发生的事情的猜测,但有人可以更好地解释一下吗?

1)程序进入StaticDeadlock静态块

2)线程启动

3)主线程等待线程完成,因此无法完成静态块

4)在线程内部访问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();
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

java multithreading deadlock

1
推荐指数
1
解决办法
2351
查看次数

标签 统计

deadlock ×1

java ×1

multithreading ×1