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

由thread.join()在静态块中引起的死锁,第1张

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

是的,仅此而已。新线程

StaticDeadlock
在访问静态成员之前,等待的类初始化程序完成。有关更多详细信息,请参见Java语言规范的12.4.2节,尤其是以下步骤:

  1. 在Class对象上进行同步(第14.19节),该对象表示要初始化的类或接口。这涉及等待当前线程可以获取该对象的锁(第17.1节)。

  2. 如果正在通过其他线程对类或接口进行初始化,请等待此Class对象(临时释放锁)。当当前线程从等待中唤醒时,请重复此步骤。

  3. 如果当前线程正在对类或接口进行初始化,则这必须是对初始化的递归请求。释放对Class对象的锁定并正常完成。

  4. 如果类或接口已经初始化,则无需采取进一步的措施。释放对Class对象的锁定并正常完成。

它甚至不会超过第二个线程中的步骤1,因为第一个线程具有锁定并且不会释放它。

请注意,不是在调用

getClass()
会导致问题-做 任何
需要使用value的 *** 作
o
都会使第二个线程等待类初始化程序完成,这当然不会发生,因为第一个线程正在等待第二个线程完成。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5428547.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存