关于Thread类的join()阻塞当前线程以等待子线程处理完毕问题?

来源:8-4 如何实现处理线程的返回值

慕斯4415754

2019-06-02

老师,使用Thread类的join()阻塞当前线程以等待子线程处理完毕,您使用了t.join()来阻塞当前线程,但为什么没有去显示唤醒,而是等待子线程处理完毕?(但是您在讲线程状态中,讲道没有设置Timeout参数的Thread.join()方法会进入无限期等待,需要被显示唤醒、如下图红线部分),期待您的解答,谢谢。
图片描述

写回答

1回答

翔仔

2019-06-03

同学好,可能这里说的显式让同学产生误解,昨天我在回答里说了join的源码,其实也是判断被调用的线程的状态,也就是子线程的状态,如果子线程没有执行完毕,那么就会一直调用wait(0)来挂起自己并出让锁,而当子线程执行完成(即run逻辑执行完毕后),此时相当于是显式停止了(因为run函数执行完毕后,相当于是显式将自己的状态置为非alive的了),因此主线程就继续执行了,所以说没有参数的就是显式停止的。

0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程