This question already has answers here:
Why does an IllegalThreadStateException occur when Thread.start is called again
                            
                                (7个答案)
                            
                    
                2年前关闭。
        

    

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

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


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

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


在上面的评论中说:


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


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

最佳答案

如果启动线程并过早使用isAlive(),则可以获取false,因为线程仍在启动。另一方面,如果在已经启动的线程上调用start(),它将抛出IlegalThreadStateException

08-16 11:11