在加入其他线程时被中断

时间:2011-06-07 13:09:05

标签: java multithreading join exception-handling concurrency

假设我实际上没有预料到被打断,我应该如何在加入其他线程时处理InterruptedException,并且没有明智的做法?只是吞下这个例外?

try
{
    t.join();
    u.join();
}
catch (InterruptedException e)
{
    // should not happen
}

或者我应该将每个join放在单独的try/catch中,如果InterruptedExeption 在加入t时发生,至少{ {1}}有机会加入吗?

u

或者我应该在循环中防御性地吞下异常,所以即使一些恶意的人试图打断我,我最终会加入两个线程?

try
{
    t.join();
}
catch (InterruptedException e)
{
    // should not happen
}
try
{
    u.join();
}
catch (InterruptedException e)
{
    // should not happen
}

另一方面,是否有while (true) { try { t.join(); break; } catch (InterruptedException e) { // no way, Jose! } } while (true) { try { u.join(); break; } catch (InterruptedException e) { // no way, Jose! } } 使我的代码看起来难看的情况? :)

1 个答案:

答案 0 :(得分:2)

如果不应该发生某些事情,你可能想知道它是否发生了 - 并且使其显而易见的最好方法通常是抛出一些RuntimeException的描述(例如IllegalStateException)。如果您没有预料到被打断的可能性,那表明系统处于您不乐意支持的状态,因此我不会继续尝试继续前进 - 快速中止通常是最好的选择。< / p>

您可能希望编写一个帮助方法,为您执行此操作,以使调用代码更清晰。