关于join原理。

来源:7-14 join注意点

CoffeePlayer

2020-05-22

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

写回答

1回答

悟空

2020-05-22

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

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

1
4
悟空
回复
imheyan
不能直接wait了,会报错。
2022-05-11
共4条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程