首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当Thread.start()返回时是否保证线程已经启动?

当Thread.start()返回时是否保证线程已经启动?
EN

Stack Overflow用户
提问于 2013-08-05 17:26:07
回答 3查看 1.5K关注 0票数 6

我尝试了一些示例代码,如下所示:

代码语言:javascript
运行
复制
Thread thread = new TestThread();
thread.start();
thread.isAlive();

在我看来,isAlive()调用返回false的唯一方法是线程已经完成。这是真的吗?

用于start的Java7 JavaDoc:

导致该线程开始执行;Java虚拟机调用该线程的run方法。结果是两个线程同时运行:当前线程(从对start方法的调用返回)和另一个线程(执行其run方法)。 不止一次地启动线程是不合法的。特别是,线程一旦完成执行就不能重新启动。

Java7 JavaDoc for isAlive:

测试此线程是否处于活动状态。如果线程已启动且尚未死亡,则该线程仍处于活动状态。

在我看来,这两件事都不太确定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-05 17:28:59

  • 语句someThread.start()将导致线程进入可运行状态。
  • 不能保证在调用run之后立即开始执行它的start()方法。
  • 确切地说,何时执行线程,完全取决于线程调度程序。
  • 当调用someThread.start()时,线程可以从可运行状态移动到运行状态,甚至是等待状态。

测试此线程是否处于活动状态。如果线程已启动且尚未死亡,则该线程仍处于活动状态。

这意味着,当调用其start()而其run()尚未完成时,线程仍处于活动状态。run()方法的完成意味着线程死了。

票数 7
EN

Stack Overflow用户

发布于 2013-08-05 17:28:14

线程已经启动并不意味着它已经在执行run方法,但是它的状态是活动的。

因此,在返回start之后,Thread是活动的,但不能保证正在执行run方法,在start方法完成后,它的状态可以是任何东西,除了New。(可运行、等待、终止等)

代码语言:javascript
运行
复制
t.isAlive() returns true if t is not in the NEW or TERMINATED state

还请看一下java线程上的这个伟大的资源。

票数 3
EN

Stack Overflow用户

发布于 2013-08-05 17:44:14

一个线程tt.start()返回并直到t.run()完成时仍然有效。

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

https://stackoverflow.com/questions/18064031

复制
相关文章

相似问题

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