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

时间:2013-08-05 17:26:07

标签: java multithreading

我尝试了一些示例代码:

Thread thread = new TestThread();
thread.start();
thread.isAlive();

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

Java 7 JavaDoc for start:

  

使该线程开始执行; Java虚拟机调用此线程的run方法。   结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。

     

不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。

isAlive的Java 7 JavaDoc:

  

测试此线程是否存活。如果一个线程已经启动并且还没有死亡,那么它就是活着的。

对我来说,这些似乎都没有定论。

3 个答案:

答案 0 :(得分:7)

  • 语句someThread.start()将导致该线程进入 可运行状态
  • 无法保证在调用run后立即开始执行start()方法。
  • 究竟何时执行线程,完全依赖于线程调度程序。
  • 当调用someThread.start()时,线程可以从runnable转移到runing状态甚至等待状态。
  

测试此线程是否存活。如果一个线程已经启动并且还没有死亡,那么它就是活着的。

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

答案 1 :(得分:3)

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

因此返回start后,Thread仍处于活动状态,但不能保证执行run方法,启动方法完成后,状态可以是除New之外的任何内容。 (可运行,等待,终止等)

t.isAlive() returns true if t is not in the NEW or TERMINATED state

另请参阅java threading

上的这个优秀资源

答案 2 :(得分:2)

一旦t返回并且t.start()完成,线程t.run()就会处于活动状态。