我正在阅读java线程源代码,有一个小问题我不确定。有两个线程,主线程和工作线程,这是一个长时间消耗的线程,我希望主线程等到工作线程死亡,所以我在工作线程上调用 join 方法,在线程源代码中,主线程在工作线程时等待活:
while (isAlive()) {
wait(0);
}
当工作线程完成工作并死亡时,现在主线程会发生什么?它是否通过自动调用工作线程上的 notifyAll 方法由线程调度程序通知?
我正在阅读java线程源代码,有一个小问题我不确定。有两个线程,主线程和工作线程,这是一个长时间消耗的线程,我希望主线程等到工作线程死亡,所以我在工作线程上调用 join 方法,在线程源代码中,主线程在工作线程时等待活:
while (isAlive()) {
wait(0);
}
当工作线程完成工作并死亡时,现在主线程会发生什么?它是否通过自动调用工作线程上的 notifyAll 方法由线程调度程序通知?
wait()
正如您在源代码中看到的那样,由于加入线程已调用,因此目标线程必须调用notify()
或notifyAll
唤醒它。
如果您在 Thread 源代码中的任何地方都看不到它,那么它可能发生在不同的类、本机代码或非公共 JVM 供应商实现代码中。
但这是一个实现细节:您可以确定它join
会在目标线程完成时返回,如文档中所述。
你说的主线程是什么意思?您是在实现 Runnable 还是在类中创建多个线程?如果您提供更多代码,可能会对您有所帮助。
workerThread.join()
从主线程中调用将导致主线程暂停执行直到workerThread
终止。然后,主线程在join()
调用之后继续执行下一条语句。
这在 Java 教程的SimpleThreads示例中进行了演示。