即使isAlive()返回false,也会引发IllegalThreadStateException异常

时间:2018-12-20 18:27:38

标签: java multithreading

我正在用线程编写一些代码,但存在以下问题。这是发生异常的代码:

if (veh != null && wantedRegistrations.contains(veh.getRegistration())) {
    veh.setLeavingTrue();
    if(!veh.isAlive()) {
        veh.start();
    }
}

因此,我对此进行了调试,如果输入了块,则isAlive()返回false,然后在此处将Thread.java中抛出IllegalThreadStateException:

if (threadStatus != 0)
    throw new IllegalThreadStateException();

并在上面的注释中说:

  

零状态值对应于状态“ NEW”。

抛出异常时,

threadStatus始终为2,这意味着它处于BLOCKED状态。好的,这令人困惑,因为我认为如果线程是NEW或TERMINATED,则isAlive()返回false。我无法发布整个代码,因为有很多代码,但是我对isAlive()方法的这种行为很感兴趣。

1 个答案:

答案 0 :(得分:1)

如果启动线程并过早使用isAlive(),则由于线程仍在启动,您可以获得false。另一方面,如果在已经启动的线程上调用start(),则会抛出IlegalThreadStateException

相关问题