我正在用线程编写一些代码,但存在以下问题。这是发生异常的代码:
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()方法的这种行为很感兴趣。
答案 0 :(得分:1)
如果启动线程并过早使用isAlive()
,则由于线程仍在启动,您可以获得false
。另一方面,如果在已经启动的线程上调用start()
,则会抛出IlegalThreadStateException
。