首页 > 编程语言 > 详细

分享系列——Thread#join() 在 Java 源码中并没有 notify ,被阻塞线程是如何唤醒的?答案在 JVM

时间:2019-09-27 09:46:33      阅读:89      评论:0      收藏:0      [点我收藏+]

前几天看了一道面试题,如何控制线程执行顺序。答案是 Thread#join()。

 

看了 join() 源码,有点疑惑,无参的 join() 会调用 Thread#wait(0); 这是一个无限阻塞的方法。并且 wait(0) 还是在 while 循环中,防止假唤醒。那么就保证一直沉睡了。

 

谁来调用 notify() / notifyAll() ??? 通过执行代码从结果反推,我们知道肯定在某处执行了唤醒。

 

于是今天想起来搜了一下,果然网上有人分析了 join() 源码,而且找到了唤醒的方法是在 JVM 底层。时机是在被调用 join 的线程死亡之前,调用自身 notifyAll() 唤醒所有在该线程上等待的其他线程。

文章链接:https://blog.csdn.net/u010983881/article/details/80257703

分享系列——Thread#join() 在 Java 源码中并没有 notify ,被阻塞线程是如何唤醒的?答案在 JVM

原文:https://www.cnblogs.com/christmad/p/11595462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!