JOIN的线程谁来唤醒
这个问题在优快云上被问到,我做了详细的回答。但提问者的水平不同,对正确答案的判断能力也不同,所他并没有满意我的回答。
我之所以专门再为此写一篇文章,是从这个问题要引出话题还是应该要阐明的。
1.join做了什么?
打开jdk的源码,可以看到join其实就是在等待目标线程的结束:
public final synchronized void join(long millis) throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System

本文详细解析了Java中JOIN线程的等待与唤醒机制。通过分析源码,指出join()方法实质上是在线程的存活期内进行wait,等待目标线程结束。当目标线程终止时,会唤醒调用join()的线程。讨论了使用while循环判断条件的重要性,以避免在多线程环境下出现异常情况,并强调了在满足等待条件时调用notify/All的必要性。
最低0.47元/天 解锁文章
454

被折叠的 条评论
为什么被折叠?



