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

Ale*_* N. 5 java multithreading

我尝试了一些示例代码:

Thread thread = new TestThread();
thread.start();
thread.isAlive();
Run Code Online (Sandbox Code Playgroud)

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

Java 7 JavaDoc for start:

导致此线程开始执行; Java虚拟机调用此线程的run方法.结果是两个线程并发运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法).

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

适用于isAlive的Java 7 JavaDoc:

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

这些对我来说都不是很有说服力.

Pra*_*kar 7

  • 该语句someThread.start()将导致该线程进入可运行状态
  • 无法保证runstart()调用后立即开始执行其方法.
  • 究竟什么时候执行线程,完全依赖于线程调度程序.
  • someThread.start()被调用时,线程可以从运行的移动到乳宁州,甚至等待状态.

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

这意味着,线程在start()被调用并且run()尚未完成时仍处于活动状态.run()方法的完成意味着线程已经死了.