首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thread.isAlive()与Thread.join()

Thread.isAlive()与Thread.join()
EN

Stack Overflow用户
提问于 2013-12-27 10:16:57
回答 3查看 3.8K关注 0票数 1

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

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

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

回答 3

Stack Overflow用户

发布于 2013-12-27 10:33:08

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

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

我假设这是您所指的来自Java的线程-class。这是一个理解多线程的好教程。它可能看起来很重,但是一旦你把你的注意力集中在线程上,你就会立刻成为一个更好的程序员。它非常有用。

票数 3
EN

Stack Overflow用户

发布于 2013-12-27 10:21:50

联接阻止当前正在运行的线程,并执行其他线程,当它完成时,将恢复被阻塞的线程。

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

票数 0
EN

Stack Overflow用户

发布于 2013-12-27 11:54:08

“在哪种场景中使用哪种方法?”什么场景?

一般来说,使用这两种方法都是高效多线程设计的良好开端。

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

isAlive()似乎是专门为鼓励开发人员而设计的。实现CPU密集型和/或延迟填充的轮询循环。我认为它会产生假阳性。当线程返回true时线程就消失了。

我需要‘只在线程-1完成后才启动线程-2’,那么任何一个线程-2都是多余的(在这种情况下,只需在线程-1函数的末尾调用‘线程-2’的函数),或者只需在线程-1函数的末尾启动线程-2。根本不需要任何信号/轮询复杂性。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20798842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档