This question already has answers here:
Why does an IllegalThreadStateException occur when Thread.start is called again
(7个答案)
2年前关闭。
我正在用线程编写一些代码,但存在以下问题。这是发生异常的代码:
因此,我对此进行了调试,如果输入了块,然后在Thread.java中将IllegalThreadStateException抛出,则isAlive()返回false:
在上面的评论中说:
零状态值对应于状态“ NEW”。
抛出异常时,threadStatus始终为2,这意味着它处于BLOCKED状态。好的,这令人困惑,因为我认为如果线程是NEW或TERMINATED,则isAlive()返回false。我无法发布整个代码,因为有很多代码,但是我对isAlive()方法的这种行为很感兴趣。
(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