24

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

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

在 Oracles 文档中活着这个词指的是什么?

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

4

7 回答 7

31

根据您提到的Javadoc:

如果线程已启动且尚未死亡,则该线程处于活动状态。

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

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

我也遵循他的建议警告您,如果抛出传播超出的异常,线程可能会过早结束run。在那种情况下,线程将不再存在。

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

于 2013-06-25T09:13:23.817 回答
3

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

于 2013-06-25T09:21:46.027 回答
2

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

于 2013-06-25T09:14:01.087 回答
1

一个线程在其start上调用该方法时并且在它死之前是活动的。它可以在死亡之前多次进入等待状态,即使它处于等待状态它仍然活着。

从活着到死去,它可以从runnable一个状态转移到另一个waiting状态。

于 2013-06-25T09:13:42.207 回答
0

从您创建 Thread 对象并启动它直到它完成 run 方法或死亡的那一刻起,线程就被认为是活着的。即使它处于空闲、运行或睡眠状态,也会说它处于活动状态。

于 2013-06-25T09:14:39.147 回答
0

Thread is "Alive" 意味着 Thread 仍在运行。

是的,您可以说该run()方法正在为活动线程执行。

此外,isAlive() 方法用于了解 Thread 是否仍在运行。

final boolean isAlive()

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

于 2013-06-25T09:14:43.507 回答
0

当线程处于新状态或运行/等待状态时,它是活动的。我们还可以知道,在线程死亡之前,它在内存中是活动的。

于 2013-06-25T09:19:01.720 回答