为什么在Thread.join()方法中使用单词“ join”?

时间:2019-01-01 21:53:45

标签: java java-threads

我开始进行研究,以了解为什么Thread.join()方法使用“ join”一词。实际上,它等待调用它的线程结束,并暂停主线程等待它,因此,没有任何要加入的内容。因此,其名称应类似于:

  1. Thread.pauseCaller();
  2. Thread.freezeCaller();
  3. Thread.focusThread();
  4. Thread.runBefore();

经过过多的研究,我发现了一个简单的句子:

  

Thread.join();名称来自调用线程的概念,该线程等待直到指定线程加入

我完全无法理解上述句子,也无法理解使用join一词作为此方法的背景。在这种情况下,“ join”一词代表什么?没有什么可以加入的。相反,它只是暂停调用线程以等待该线程后跟join()。那么,谁能说出使用join这个词的上下文?

2 个答案:

答案 0 :(得分:7)

“ join”一词来自Fork–Join model,其中“ fork”表示将线程拆分为多个线程以进行并行处理,“ join”表示等待并行线程完成其工作,然后再执行在一个线程中继续。

答案 1 :(得分:3)

Join是并发模型中使用的通用术语,它意味着两个独立运行的线程正在彼此同步,并且一个线程只有在另一个线程到达特定的连接点时才会继续进行。因此,有2个线程将 joining 重新组合为一个。在Java中,通常是在另一个线程完成其任务时。

请注意,在可重复使用的工作线程支持任务的模型中,这可能并不完全相同,例如使用ExecutorService等待结果,并使用CompletableFuture.join()阻止直到结果可用。在这种情况下,与实际执行的底层工作线程相比,联接与并行执行的任务相关性更高,而实际的基础工作线程以后可能会被其他任务重用。

名称本身来自fork-join model,用于并行化任务并收集其结果。