我在实现线程时遇到了疑问,所以想在我取得进展之前将其清除。我有一个方法从新线程被调用,在下一行我有return语句。
方法(){
调用线程();
return statement;
}
这里发生了什么?我的意思是父进程在子进程之前完成吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
请看这篇文章
make-parent-thread-wait-till-child-thread-completes-or-timeout
您需要使用join
方法。在父完成之前,您必须等待子线程完成。
答案 2 :(得分:0)
您似乎对线程和进程的概念感到困惑。 Java程序在Java虚拟机中运行。此JVM是一个进程(可在您的操作系统的任务管理器中查看)。流程可以“包含”多个流程。有关这方面的更多信息,请参阅this SO question that discusses the differences。
要回到您的问题,您的代码会生成一个新线程并返回。线程的实际作用与调用方法无关。您询问父进程是否在子进程之前完成?那取决于。新线程有什么作用?如果它非常快,那么也许不是。它们“并行”运行,这就是我们首先使用线程的原因。所以你不应该把你的逻辑基于先完成的事情。
你打电话给你的朋友并要求他照顾好某事的形象。你打电话给他后,你继续做其他事情。电话已经成功,你继续你的一天。你的朋友是你的新线程。也许你想稍后检查一切是否正常,但你不会在他照顾它时等待电话。不使用线程就是这种情况。
如果您认真对待Java并发,我强烈推荐Java Concurrency In Practice