我尝试了一些示例代码,如下所示:
Thread thread = new TestThread();
thread.start();
thread.isAlive();
在我看来,isAlive()调用返回false的唯一方法是线程已经完成。这是真的吗?
用于start的Java7 JavaDoc:
导致该线程开始执行;Java虚拟机调用该线程的run方法。结果是两个线程同时运行:当前线程(从对start方法的调用返回)和另一个线程(执行其run方法)。 不止一次地启动线程是不合法的。特别是,线程一旦完成执行就不能重新启动。
Java7 JavaDoc for isAlive:
测试此线程是否处于活动状态。如果线程已启动且尚未死亡,则该线程仍处于活动状态。
在我看来,这两件事都不太确定。
发布于 2013-08-05 17:28:59
someThread.start()
将导致线程进入可运行状态。run
之后立即开始执行它的start()
方法。someThread.start()
时,线程可以从可运行状态移动到运行状态,甚至是等待状态。测试此线程是否处于活动状态。如果线程已启动且尚未死亡,则该线程仍处于活动状态。
这意味着,当调用其start()
而其run()
尚未完成时,线程仍处于活动状态。run()
方法的完成意味着线程死了。
发布于 2013-08-05 17:28:14
线程已经启动并不意味着它已经在执行run方法,但是它的状态是活动的。
因此,在返回start之后,Thread是活动的,但不能保证正在执行run方法,在start方法完成后,它的状态可以是任何东西,除了New。(可运行、等待、终止等)
t.isAlive() returns true if t is not in the NEW or TERMINATED state
还请看一下java线程上的这个伟大的资源。
发布于 2013-08-05 17:44:14
一个线程t
在t.start()
返回并直到t.run()
完成时仍然有效。
https://stackoverflow.com/questions/18064031
复制相似问题