什么时候Java线程活着?

Ein*_*ren 19 java multithreading

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

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

这个词是什么活着是指甲骨文的文档?

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

Mat*_*ieu 28

根据你提到的Javadoc:

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

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

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

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

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

  • 这都是你的:)很好地解释了答案. (4认同)
  • 请注意,"Thread#stop"只不过是异步抛出异常.如果该异常不会导致run方法中止,则该线程继续存在. (4认同)
  • @zakkak,你必须做一些假设:正如javadoc所说,一旦你调用`start()`,你必须假设你的线程已经启动.如果你需要对`run()`进行精确控制,你应该在`ScheduledExecutorService`中使用`Runnable`,或者在实时调度程序(使用适当的JVM)中使用OS.我会看到如何更新我的答案. (2认同)