请解释一下为什么下面的代码会抛出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()是可以的。
请给我解释一下。
非常感谢!
发布于 2011-12-28 10:07:41
这行代码:
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(),以找出具体的详细信息。
它可能包含额外的信息,以便更容易地进行根本原因分析。
https://stackoverflow.com/questions/8651064
复制相似问题