请向我解释为什么以下代码会抛出IllegalThreadStateException?
try
{
if(thread1 != null)
{
if(thread1.isAlive());
{
thread1.interrupt(); //it is ok
thread1.join();
}
}
if(thread2 != null)
{
if(thread2.isAlive());
{
thread2.interrupt(); //throw IllegalThreadStateException
thread2.join();
}
}
}
catch(IllegalThreadStateException e)
{
System.exit(0);
}
运行语句thread2.interrupt()时抛出了IllegalThreadStateException。但是thread1.interrupt()没问题。
请向我解释。
非常感谢!
答案 0 :(得分:0)
该行:
if(thread2.isAlive()); // <-- Note this semicolon well!
没有做你认为它正在做的事情:-)代码段:
if(thread2.isAlive());
{
thread2.interrupt(); //throw IllegalThreadStateException
thread2.join();
}
将检查线程是否处于活动状态,如果是,则在分号前执行该空语句。然后它将在大括号内执行interrupt/join
序列,无论线程的状态是什么。那是因为:
{
doSomething();
}
是一个完全有效的Java构造,即使它前面没有if
或while
。变化:
if(thread2.isAlive());
为:
if(thread2.isAlive())
(同样对thread1
检查也一样。)
您还应该在异常上调用getMessage()
以找出具体的详细信息(如果有的话)。
它可能包含更多信息,以便于根本原因分析。