java中的sleep和join之间的相似性

正如问题所示,我想知道线程上sleep和join方法之间的相似性。 我已经经历了许多描述睡眠和连接方法之间差异的问题。 但我想知道睡眠和连接方法可以互换使用的不同场景。 根据我的想法,下面的代码应该以同样的方式工作。 我有一个主线程,我在其中启动一个新线程(只有1),我希望主线程等待新线程完成一段时间。 代码如下:

newThread.join(10000) 

要么,

  Thread.sleep(10000) 

但是,当我运行此代码时,我没有得到预期的结果。 为什么会这样? 从技术上讲它应该是一样的吗?

我不清楚你的实际问题是什么,但你的第三句话说:“我想知道睡眠和连接方法可以互换使用的不同场景。”

从实际的角度来看,如果您与编写生产代码的软件开发团队合作,那么其他开发人员就不会允许您使用join(long)作为sleep(替代)睡眠(long)。 没有办法,没有办法! 在某些情况下它实际上会起作用并不重要。

生产代码应该是可读的。 代码的意图对其他人来说应该是显而易见的。 它应该遵循最小惊喜原则(参见清洁代码: Robert C. Martin 的敏捷软件工艺手册 )。 这意味着,当你写foobar.join(n)时,你应该期待foobar线程死掉。 您可能已准备好处理超时情况,但这应该是例外,而不是规则。 没有其他合理的理由可以调用join(n)。 其他任何东西都是“黑客”,我们不会在生产代码中加入黑客。

不不不

sleepjoin完全不同的

join将等待指定的Thread完成(正常或exception)或直到时间到期。

sleep将在指定时间内停止当前线程。

它们完全不同。 一个显式等待另一个Thread并唤醒该Thread结束的瞬间sleep只是停止执行。

如果你可以保证 newThread将花费更长的时间来完成10,000ms ,那么它们就会变得相同,但这是一个退化的情况。

如果要等待另一个Thread完成使用join

如果你想让你当前的Thread停止它正在做的事情并暂时hibernate一段时间。