【发布时间】:2013-06-22 00:17:38
【问题描述】:
【问题讨论】:
-
答案是:“如果线程已启动且尚未死亡,则它是活动的。”。此链接也应该对您有所帮助:journals.ecs.soton.ac.uk/java/tutorial/java/threads/states.html
-
感谢您提供的图表。这真的很有帮助。
标签: java multithreading
【问题讨论】:
标签: java multithreading
根据您提到的 Javadoc:
如果线程已启动且尚未死亡,则线程处于活动状态。
当调用其start() 方法并在其run() 方法结束时或当调用stop()(现已弃用)时,线程“启动”。所以是的,一个线程在其run() 方法仍在运行时是“活动的”,但它在start() 的调用和JVM 对run() 方法的隐式调用之间的时间窗口内也是“活动的” .
您也可以查看@Marou Maroun 建议的Thread.getState() 和interesting information about Thread States。
我也遵循他的建议警告您,如果抛出传播到run 之外的异常,线程可能会提前结束。在这种情况下,线程将不再存在。
编辑:正如@zakkak 所建议的,即使run() 方法尚未启动,线程也可以被认为是活动的。如果您想正确控制何时调用它,请使用ScheduledExecutorService,特别是schedule() 方法,它可以为您提供更精确的执行计划。
【讨论】:
Thread#stop 只不过是异步抛出异常。如果该异常没有导致 run 方法中止,则线程继续存在。
start(),你必须假设你的线程已经启动。如果您需要精确控制run(),您应该在ScheduledExecutorService 中使用Runnable,或者使用带有实时调度程序的操作系统(使用适当的JVM)。考虑到这一点,我会看看如何更新我的答案。
从您创建 Thread 对象并启动它直到它完成 run 方法或死亡的那一刻,线程被认为是活着的。即使处于空闲、运行或睡眠状态,也会说它处于活动状态。
【讨论】:
当在其上调用start 方法并且在它死之前,线程处于活动状态。它可以在死亡之前多次进入等待状态,即使它处于等待状态它仍然活着。
从活到死,它可以从runnable状态移动到waiting状态。
【讨论】:
在 start() 返回后,直到 run() 返回 JVM,线程仍处于活动状态。
【讨论】:
线程处于新状态或运行/等待状态时是活动的。而且我们还可以看出,在线程死亡之前,它在内存中是活动的。
【讨论】:
Thread is "Alive" 表示 Thread 仍在运行。
是的,您可以说run() 方法正在为活动线程执行。
此外,isAlive() 方法用于知道 Thread 是否还在运行。
final boolean isAlive()
如果调用它的线程仍在运行,isAlive() 方法将返回 true。否则返回 false。
【讨论】:
线程处于新/运行/等待状态时是活动的。本质上,run 方法可以运行也可以不运行
【讨论】:
start() 线程才能使其处于活动状态:MyThread t = new MyThread(); t.isAlive(); 返回 'false'