Thread join方法的一个疑问

ncist_jianeng 2015-02-25 04:37:59
Thread的join方法的作用是挂起主线程,直到子线程执行完之后才继续执行。源码的注解是Waits for this thread to die.
继续往下看会发现这样一段代码
if (millis == 0) {
while (isAlive()) {
wait(0);
}
}

说明一直在循环判断子线程是否还存活,若是则挂起主线程。现在有一个疑问是,当子线程执行完,回到主线程后,主线程为什么还能继续往下执行,不是已经调用wait()方法阻塞了吗,并且也没有调用notify()唤醒这个主线程
...全文
243 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmyangym 2015-03-03
  • 打赏
  • 举报
回复
我以前写过一篇博客,可以证明一个线程结束的时候,以这个线程对象运行的wait()等待,都会退出。但是没看到过在哪里运行notify()方法。 记得ldh911有过一个解释,但是找不到了。楼主如果有了新的发现,告诉我一下。 http://blog.csdn.net/nmyangym/article/details/7850882
ncist_jianeng 2015-02-27
  • 打赏
  • 举报
回复
应该是spurious wakeups?不知道这个是什么东西
ncist_jianeng 2015-02-27
  • 打赏
  • 举报
回复
网上这方面的解释都没找到
ncist_jianeng 2015-02-27
  • 打赏
  • 举报
回复
引用 2 楼 kk_124 的回复:
楼主问的不错。因为在线程退出的时候会调用一个native方法,此方法中会有一项操作就是会唤醒所有在该对象上wait的所有线程。
是只有线程的退出会有这项操作还是个什么原理,可不可以给个链接参考参考
普凡 2015-02-26
  • 打赏
  • 举报
回复
楼主问的不错。因为在线程退出的时候会调用一个native方法,此方法中会有一项操作就是会唤醒所有在该对象上wait的所有线程。
ncist_jianeng 2015-02-26
  • 打赏
  • 举报
回复
没人吗???

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧