什么时候Java线程活着?

这是关于Java线程词汇的一个非常基本的问题。

我看不到任何可能的重复,但可能有。

在Oracles文档中, alive所指的是什么?

是在run()方法尚未完成时还是其他任何参数?

根据你提到的Javadoc:

如果一个线程已经启动并且还没有死亡,它就是活着的。

线程“启动”时调用其start()方法并在其run()方法结束时“死”,或者调用stop() (现已弃用)。 所以是的,当一个线程的run()方法仍然在进行时它是“活着的”,但是在调用start()和jVM对run()方法的隐式调用之间的时间窗口中它也是“活着的”。 。

您还可以查看由@Marou Maroun建议的Thread.getState()和有关线程状态的有趣信息 。

我也遵循他的建议警告你,如果抛出一个传播超出run的exception,Thread可以提前结束。 在那种情况下,线程将不再存在。

编辑:正如@zakkak所建议的那样,即使run()方法尚未启动,线程也可以被认为是活动的。 如果您想要对何时调用它进行适当的控制,请使用ScheduledExecutorService ,特别是schedule()方法,它可以为您提供更精确的执行计划。

线程处于新/运行/等待状态时处于活动状态。 本质上,run方法可以运行或不运行

返回start()之后线程处于活动状态,直到run()返回JVM。

当调用start方法并且在它停止之前,线程处于活动状态。 它可以在它死之前移动到等待状态的次数,即使它处于等待状态它仍然存活。

从活着到死亡,它可以从runnable状态转变为waiting状态。

线程是“活着”意味着线程仍在运行。

是的,你可以说run()方法正在为Alive Thread执行。

而且,isAlive()方法用于知道Thread是否仍在运行。

 final boolean isAlive() 

如果调用它的线程仍在运行,则isAlive()方法返回true。 否则返回false。

线程处于新状态或运行/等待状态时处于活动状态。我们还可以告诉它,直到线程死亡,它在内存中存活。

从创建Thread对象开始直到它完成run方法或者死亡为止,一个线程被认为是活动的。 即使它处于空闲,运行或睡眠状态,也会被称为处于活动状态。