一尘不染

Java中sleep和join之间的相似性

java

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

   newThread.join(10000)

要么,

  Thread.sleep(10000)

但是,当我运行这段代码时,没有得到预期的结果。为什么会这样呢?从技术上来说应该是正确的吗?


阅读 210

收藏
2020-12-03

共1个答案

一尘不染

我不清楚您的实际问题是什么,但是您的第三句话说:“我想知道可以交替使用睡眠和加入方法的不同情况。”

从实用的角度来看,如果你拥有一支由软件开发人员编写的生产代码的工作,就不会有 任何
场景中,其他开发商将允许您使用连接(长)作为替代的睡眠(长)。没办法,没有办法!在某些情况下它会真正起作用并不重要。

生产代码应可读。该代码的意图对于其他人应该显而易见。它应遵守“最不惊奇的原则”(请参阅​​“ 干净代码: Robert C. Martin
编写的敏捷软件工艺手册”
)。这意味着,当您编写foobar.join(n)时,您应该期望foobar线程死亡。您可能已经准备好处理超时情况,但这应该是例外,而不是规则。没有其他正当理由调用join(n)。其他任何事情都是“
hack”,我们不会在生产代码中使用hack。

2020-12-03