1

我正在阅读java线程源代码,有一个小问题我不确定。有两个线程,主线程和工作线程,这是一个长时间消耗的线程,我希望主线程等到工作线程死亡,所以我在工作线程上调用 join 方法,在线程源代码中,主线程在工作线程时等待活:

 while (isAlive()) {
            wait(0);
        }

当工作线程完成工作并死亡时,现在主线程会发生什么?它是否通过自动调用工作线程上的 notifyAll 方法由线程调度程序通知?

4

3 回答 3

1

wait()正如您在源代码中看到的那样,由于加入线程已调用,因此目标线程必须调用notify()notifyAll唤醒它。

如果您在 Thread 源代码中的任何地方都看不到它,那么它可能发生在不同的类、本机代码或非公共 JVM 供应商实现代码中。

但这是一个实现细节:您可以确定它join会在目标线程完成时返回,如文档中所述。

于 2013-03-16T03:12:23.790 回答
0

你说的主线程是什么意思?您是在实现 Runnable 还是在类中创建多个线程?如果您提供更多代码,可能会对您有所帮助。

于 2013-03-16T03:06:42.537 回答
0

workerThread.join()从主线程中调用将导致主线程暂停执行直到workerThread终止。然后,主线程在join()调用之后继续执行下一条语句。

这在 Java 教程的SimpleThreads示例中进行了演示。

于 2013-03-16T03:08:53.857 回答