在Thread中使用join(长毫秒)超过睡眠(长毫秒)的用途是什么

时间:2017-09-08 10:45:37

标签: java multithreading

我想知道使用join(long millis)而不是sleep(long millis),因为它们都会暂停该线程一段时间。

因此,如果在该持续时间之后仍然会调用由另一个线程加入的线程,甚至连接线程是否已完成。那么为什么要使用milli的连接而不是使用milli的睡眠。

尽管如此,我已经收到了这个问题的答案,只是想清楚地解释这个问题。

谢谢,

1 个答案:

答案 0 :(得分:0)

假设你有一个帖子:使用sleep(timeout) - 它会一直等待timeout秒才会继续。

假设您有两个主题:

  • 选项1:Thread1应该等待并且与Thread2无关 - 使用sleep(timeout) - 在继续之前它将始终等待timeout秒。
  • 选项2:Thread1确实与Thread2有关,因此(并且因此)在Thread2上调用join(timeout)
    • 选项2.1:Thread2在超时前完成。知道Thread2已经完成,Thread1可以立即继续处理。它不会等到timeout秒。
    • 选项2.2:Thread2在超时后完成。 Thread1现在知道Thread2仍在做一些工作,并且可能向用户显示“进程花费的时间更长”,甚至取消其他任务。此时它将等待timeout秒。这就像睡眠,但你事先不知道2.1或2.2会发生,因此sleep不是一个合适的选择。