为什么java.lang.Thread.join()方法的名称是这样的?

时间:2009-06-22 11:57:26

标签: multithreading concurrency naming

有人知道为什么java.lang.Thread的方法join()成员被命名为?它的javadoc是:

  

等待此线程死亡。

当某个线程上调用join时,调用线程正在等待另一个线程死并继续执行。据说调用线程也会死掉,但仍然不清楚为什么作者使用了这个名字。

6 个答案:

答案 0 :(得分:17)

这是线程中的常见名称 - 它不像Java是第一个使用它的。 (例如,这也是pthreads使用的。)

我想你可以想象它就像两个人散步一样 - 你加入另一个人并与他们一起走,直到你完成,然后回到你正在做的事情。类比的排序可能是最初的原因,虽然我同意它并不完全直观。

答案 1 :(得分:8)

它以这种方式命名,因为你基本上声明执行的调用线程将等待加入给定的执行状态。它也被命名为posix和许多其他线程包中的join。

在调用join返回之后(除非它被中断),两个执行线程基本上从那一点开始运行(该线程获得现在终止的线程的返回值)。

答案 2 :(得分:6)

这源于并发软件建模,当控制流分裂为并发线程时。之后,两个执行线程将再次加入。

同样waitToDie()可能是a)太长而且b)太病态。

答案 3 :(得分:1)

好吧......这不是真的正确但我想到了一个“等候室”(它实际上不是一个具有某种调度的队列,如FIFO,HRRN等)。 当一个线程无法继续并且需要等待其他一些线程来完成它时,只需加入等候室中的人员(又称线程)即可获得活动...

答案 4 :(得分:0)

因为您正在等待另一个执行线程(即您正在调用的那个线程)加入(即死掉)当前(即调用)线程。

调用线程不会死:它只是等待另一个线程这样做。

答案 5 :(得分:0)

这是一个被广泛使用的术语(也在Java之外)。我认为它是以某种方式将一个线程与另一个线程相关联。我认为Thread.Associate()可能是一个更好的选择,但Join()也不错。