Thread.isAlive()vs Thread.join()

时间:2013-12-27 10:16:58

标签: multithreading

我在goAlive vs join()上搜索了很多,但没有得到正确的解释。 假设我有Thread-1和Thread-2,我只需要在Thread-1完成后启动Thread-2。

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

  1. 那有什么区别?
  2. 在哪种情况下使用哪种方法?

3 个答案:

答案 0 :(得分:3)

.isAlive()只返回一个布尔值,指示线程是否处于活动状态,线程的状态 - 它返回 true false ,表示线程是否存在是“完成”。

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

我假设它是你所指的Java的Thread - 类。这是用于理解多线程的good tutorial。它看起来像是沉重的东西,但是一旦你了解了线程,你就会立刻成为一个更好的程序员。这非常有用。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

'在哪种情况下使用哪种方法?'什么情景?

一般情况下,使用这两者都不是高效多线程设计的良好开端。

Join()似乎专门设计用于在GUI应用程序等中生成关闭死锁。

isAlive()似乎是专为鼓励开发者而设计的。实现CPU密集型和/或延迟级别的轮询循环。我认为它可以产生误报,即。线程在返回true时就消失了。

我需要'在Thread-1完成后才'启动Thread-2',然后两个线程都是冗余的(在这种情况下,只需在函数末尾调用'thread-2'函数) thread-1),或者你可以在函数结尾处为thread-1简单地启动thread-2。根本不需要信令/轮询并发症。