【问题标题】:Why was the method java.lang.Thread.join() named like that?为什么方法 java.lang.Thread.join() 是这样命名的?
【发布时间】:2009-06-22 11:57:25
【问题描述】:

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

等待此线程终止。

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

【问题讨论】:

  • 如果您认为 join 不太直观,请阅读有关 System.Threading.Thread.Join() 的德语 MSDN 文档。它被翻译为“verknüpfen”,意思是“链接”而不是“加入”。好吧,至少文档说它会等到线程完成/结束(而不是死);)
  • 嗯,“verknüpfen”是“结在一起”。所以我认为他们试图对他们的“线程”隐喻有所帮助。强调尝试
  • 也许吧。然而,在软件开发术语中,“verknüpfen”总是用于“链接”(如超链接或外壳链接),所以这是一个相当糟糕的选择。但是在MSDN的德文翻译中也有很多,虽然大部分还是不错的。有时似乎翻译人员对技术部分的了解还不够。在旧版本中,“reference”被盲目翻译为“Verweis”,这是编程术语中的参考,但也被翻译成这样的参考文档,在德语中没有意义......但他们修复了那个;)

标签: multithreading concurrency naming


【解决方案1】:

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

我想你可以把它想象成两个人在散步——你和另一个人一起散步,直到你完成,然后再回到你正在做的事情。 的类比可能是最初的原因,尽管我同意它并不完全直观。

【讨论】:

    【解决方案2】:

    之所以这样命名,是因为您基本上是在说明调用执行线程将等待加入给定的执行状态。它在 posix 和许多其他线程包中也被称为 join。

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

    【讨论】:

    • 我会说比“等待加入给定的执行状态”调用线程“将两个线程连接在一起”更好,因此逻辑上只有一个线程可以做任何事情,而不是在那之前是独立的两个。尽管如此,仍然不是 100% 满意。
    【解决方案3】:

    这源于控制流拆分为并发线程时的并发软件建模。稍后,两个执行线程会再次加入。

    waitToDie() 也可能是 a) 太长 b) 太病态了。

    【讨论】:

    • 啊,现在更有意义了。 wait() 也可能是一个选项...
    • 这一定是命名法背后的真正原因
    【解决方案4】:

    嗯...这不是真的正确,但我想到了一个“等候室”(它实际上不是一个具有特定调度的队列,如 FIFO、HRRN 等)。 当一个线程无法继续并需要等待其他线程完成时,它只需加入等候室中的人(又名线程)以激活下一个......

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 对我来说,Thread.associate() 意味着两个线程之间的某种连接超出了调用,但作为单独的实体。我认为这是一种误导,因为给定的线程不再运行,而是组合成一个由 join() 调用定义的单一执行路径。
        猜你喜欢
        • 2021-06-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-16
        • 1970-01-01
        • 1970-01-01
        • 2016-04-12
        • 2010-10-27
        • 2016-02-24
        相关资源
        最近更新 更多