请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于join原理。

老师,您好!
join底层调用了子线程对象的wait方法,等待子线程执行完毕后,就会调用子线程对象的notify,这样主线程就会继续执行。
我在想,如果子线程执行的很快,还没有等到主线程执行join方法,就执行完毕后,会不会造成永久等待?
我用如下代码演示,发现并没有出现永久等待的现象。
图片描述但是根据原理,会发现如下的代码就会出现永久等待
图片描述我想问老师,是否更低层做了一些优化,期待老师的回复!

正在回答

1回答

小伙伴的思考很棒!点赞。

join不会永久等待,是因为在join让主线程等待前,会先判断子线程是否已经运行完毕了,如果发现已经运行完毕,就不再去让主线程wait了

1 回复 有任何疑惑可以回复我~
  • 但是第二种情况,永久等待的原因是因为,没有人notify thread这个对象
    回复 有任何疑惑可以回复我~ 2020-07-17 10:36:09
  • 是的。
    回复 有任何疑惑可以回复我~ 2020-07-17 14:05:04
  • imheyan 回复 悟空 #3
    老师您好!thread 线程状态 TERMINATED 之后还能调用 wait 方法吗?因为 main 线程睡了1秒所以在进入同步代码块前,此时thread已经结束啦。
    回复 有任何疑惑可以回复我~ 2022-05-10 20:52:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信