Multithreading Thread.isAlive()与Thread.join()的比较

Multithreading Thread.isAlive()与Thread.join()的比较,multithreading,Multithreading,我在谷歌上搜索了很多关于isAlive vs join()的信息,但没有得到正确的解释。 假设我有线程1和线程2,我只需要在线程1完成后启动线程2 使用这两种方法都可以达到上述要求 那么有什么区别呢 在哪种情况下使用哪种方法 join阻塞当前正在运行的线程并执行其他线程,当它完成后,恢复被阻塞的线程 我认为isAlive只返回线程是否正在运行。只返回一个布尔值,指示线程是否处于活动状态,线程的状态-它返回true或false,指示线程是否“完成” 使当前线程处于等待状态,直到正在调用的线程完成。

我在谷歌上搜索了很多关于isAlive vs join()的信息,但没有得到正确的解释。 假设我有线程1和线程2,我只需要在线程1完成后启动线程2

使用这两种方法都可以达到上述要求

  • 那么有什么区别呢
  • 在哪种情况下使用哪种方法

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

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

    只返回一个布尔值,指示线程是否处于活动状态,线程的状态-它返回truefalse,指示线程是否“完成”

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


    我假设您所指的是Java中的-类。下面是一个用于理解多线程的示例。它看起来很沉重,但一旦你开始思考线程,你会立刻成为一个更好的程序员。它非常有用。

    在哪种情况下使用哪种方法?哪种情况

    一般来说,使用两者都不是高效多线程设计的良好开端

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

    isAlive()似乎是专门为鼓励开发者而设计的。实现CPU密集型和/或延迟严重的轮询循环。我假设它会产生误报,也就是说,当线程返回true时,它就消失了


    我需要“仅在线程1完成后启动线程2”,然后线程2是冗余的(在这种情况下,只需在线程1的函数末尾调用“线程2”的函数),或者只需在线程1的函数末尾启动线程2。根本不需要信令/轮询复杂化。

    ,这篇文章可能会回答您的问题。。或者只需调用thread-1函数/方法末尾的“thread-2”代码,就可以删除thread-2,或者在thread-1函数/方法末尾启动thread 2。开发人员为什么要这样做。当事情变得如此简单时,你必须让事情变得复杂吗?…或者,更可能的是,isAlive返回true或false,指示线程是否在调用返回之前的某个时间“完成”。这是一个荒谬的特性,它只会鼓励开发人员不断地轮询并不断地创建/终止/销毁线程。只是一个愚蠢的特性。isAlive只返回线程是否正在运行-返回“true”并不意味着线程仍然存在。不完全是。我有一个监视线程,它按需轮询来自所有活动线程的当前状态数据(用于线程中的内部进程),并使用IsAlive删除对不再运行的线程的引用。另一种方法是让所有线程都使用事件来始终报告状态,但因为我们并不总是需要状态,这可能会导致更大的开销。Join用于关闭,您需要等待所有活动线程关闭,然后才能完成清理并返回报告。在这种情况下,没有一个线程可以触发“下一个线程”。