我在goAlive vs join()上搜索了很多,但没有得到正确的解释。 假设我有Thread-1和Thread-2,我只需要在Thread-1完成后启动Thread-2。
使用这两种方法可以实现上述要求。
答案 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。根本不需要信令/轮询并发症。