我尝试了一些示例代码:
Thread thread = new TestThread();
thread.start();
thread.isAlive();
在我看来,isAlive()调用返回false的唯一方法是线程已经完成。这是真的吗?
Java 7 JavaDoc for start:
使该线程开始执行; Java虚拟机调用此线程的run方法。 结果是两个线程同时运行:当前线程(从调用start方法返回)和另一个线程(执行其run方法)。
不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。
isAlive的Java 7 JavaDoc:
测试此线程是否存活。如果一个线程已经启动并且还没有死亡,那么它就是活着的。
对我来说,这些似乎都没有定论。
答案 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()
就会处于活动状态。