Thread.isAlive() vs Thread.join()



我已经用谷歌搜索了很多关于isAlive与join()的信息,但没有得到适当的解释。假设我有线程 1 和线程 2,并且只有在线程 1 完成后才需要启动线程 2。

使用这两种方法都可以实现上述要求。

  1. 那么有什么区别呢?
  2. 在哪种场景中使用哪种方法?

.isAlive() 只返回一个布尔值,指示线程是否处于活动状态,线程的状态 - 它返回 truefalse,指示线程是否"完成"。

.join() 使当前所在的线程等待,直到您调用 .join() 的线程完成。例如,如果您有一些计算需要在另一个线程中完成,然后再继续当前线程中的其余代码。

我假设它是你所指的来自Java的Thread类。这是了解多线程的好教程。这看起来像是繁重的东西,但是一旦你掌握了线程,你就会立即成为一个更好的程序员。它非常有用。

join 会阻止当前正在运行的线程并执行其他线程,当它完成时,然后恢复被阻止的线程。

我认为 isAlive 只是返回线程是否正在运行。

"在哪个场景中使用哪种方法?"什么场景?

通常,使用这两种方法都不是高效多线程设计的良好开端。

Join() 似乎是专门为在 GUI 应用程序等中生成关机死锁而设计的。

isAlive() 似乎是专门为鼓励开发人员而设计的,以实现 CPU 密集型和/或延迟繁忙的轮询循环。 我假设它可以产生误报,即。线程在返回 true 时已消失。

我需要"仅在线程 1 完成后启动线程 2",然后线程 2

是多余的(在这种情况下,只需在线程 1 的函数末尾调用"thread-2"的函数),或者您可以简单地在线程 1 的函数末尾启动线程 2。 完全不需要信令/轮询的复杂性。

最新更新