start()
方法时,线程“启动”,并在其run()
方法结束或调用stop()
(现已弃用)时“死亡”。因此,在run()
方法仍在进行时,线程是“活动”的,但在JVM隐式调用run()
方法之前的时间窗口中也是“活动”的。Thread.getState()
和关于线程状态的有趣信息,这是@Marou Maroun建议的。run
的异常,线程可能会过早结束。在这种情况下,该线程将不再处于活动状态。
编辑:根据@zakkak的建议,即使run()
方法尚未启动,该线程也可以被视为处于活动状态。如果您想要对其何时调用进行适当控制,请使用ScheduledExecutorService
,特别是schedule()
方法,它可以给您提供更精确的执行计划。
Thread#stop
方法无非是异步抛出一个异常。如果该异常并没有导致 run
方法中止,那么该线程仍会继续执行。 - Marko Topolnikstart()
,你必须假设你的线程已经启动。如果你需要对run()
有精确的控制,你应该在ScheduledExecutorService
中使用一个Runnable
,或者使用带有实时调度程序的操作系统(具有适当的JVM)。我会考虑如何更新我的答案来考虑这一点。 - Matthieu在调用start()方法后,线程处于活动状态直到run()方法执行完并返回到JVM。
当线程处于新建、运行或等待状态时,它就是活动的。实际上,run()
方法可能正在运行,也可能没有在运行。
start()
方法来启动线程,使其处于活动状态:MyThread t = new MyThread(); t.isAlive();
返回 'false'。 - Matthieu当调用线程的start
方法并且线程未死亡时,该线程是活动状态。它可以在死亡之前多次进入等待状态,即使在等待状态下,它仍然处于活动状态。
从活动状态到死亡状态,它可以从可运行
状态转移到等待
状态。
线程被认为是从创建Thread对象并启动它直到完成运行方法或死亡的时刻才算存活。即使处于空闲、运行或睡眠状态,它仍然被视为处于存活状态。
线程状态为“Alive”表示线程仍在运行。
可以说正在执行run()
方法的线程是活动的线程。
此外,可以使用isAlive()方法来判断线程是否仍在运行。
final boolean isAlive()
isAlive()
方法返回 true,如果调用它的线程仍在运行,则返回 true。否则返回 false。
当线程处于新状态或运行/等待状态时,它是活着的。我们也可以说,在线程死亡之前,它在内存中是活着的。