6

我尝试了一些示例代码:

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

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

Java 7 JavaDoc 开始:

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

多次启动一个线程是不合法的。特别是,线程一旦完成执行就可能不会重新启动。

isAlive 的 Java 7 JavaDoc:

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

这些对我来说似乎都不是很有结论性的。

4

3 回答 3

7
  • 该语句someThread.start()将导致该线程进入可运行状态
  • 不能保证它会在被调用run后立即开始执行其方法。start()
  • 究竟何时执行线程,完全取决于线程调度程序。
  • someThread.start()被调用时,线程可以从可运行状态进入运行状态甚至等待状态。

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

这意味着,当线程被start()调用并且run()尚未完成时,线程是活动的。方法的完成run()意味着线程已死。

于 2013-08-05T17:28:59.830 回答
3

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

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

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

还可以看看这个关于java threading的好资源

于 2013-08-05T17:28:14.430 回答
2

线程一返回t就处于活动t.start()状态,直到t.run()完成。

于 2013-08-05T17:44:14.243 回答