为什么Thread.interrupt()会抛出IllegalThreadStateException?

时间:2011-12-28 01:51:55

标签: android blackberry

请向我解释为什么以下代码会抛出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()没问题。

请向我解释。

非常感谢!

1 个答案:

答案 0 :(得分:0)

该行:

if(thread2.isAlive()); // <-- Note this semicolon well!

没有做你认为它正在做的事情:-)代码段:

if(thread2.isAlive());
{
    thread2.interrupt(); //throw IllegalThreadStateException
    thread2.join();
}

将检查线程是否处于活动状态,如果是,则在分号前执行该空语句。然后它将在大括号内执行interrupt/join序列,无论线程的状态是什么。那是因为:

{
    doSomething();
}

是一个完全有效的Java构造,即使它前面没有ifwhile。变化:

if(thread2.isAlive());

为:

if(thread2.isAlive())

(同样对thread1检查也一样。)


您还应该在异常上调用getMessage()以找出具体的详细信息(如果有的话)。

它可能包含更多信息,以便于根本原因分析。