6
我想知道Java如何实现join()方法来等待线程完成。按照source code:JDK实现Thread.join()
public final synchronized void [More ...] 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.currentTimeMillis() - base;
}
}
}
调用线程获得运行的线程的监控和wait()在行1160无限期同时运行的线程仍然活着。
我的问题是:当线程完成时,哪里(和谁调用)notify()或notifyAll(),以便唤醒调用线程?
为了清楚起见,问题是关于,在JDK/JVM中notify()被调用,而不是在我们的代码中。
谢谢。
它是JDK的线程实现的一部分。当'run'返回时,它相当于调用'notifyAll'。 –
它被称为本地代码中的某处(用C++编写) –