假设我实际上没有预料到被打断,我应该如何在加入其他线程时处理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!
}
}
使我的代码看起来难看的情况? :)
答案 0 :(得分:2)
如果不应该发生某些事情,你可能想知道它是否发生了 - 并且使其显而易见的最好方法通常是抛出一些RuntimeException
的描述(例如IllegalStateException
)。如果您没有预料到被打断的可能性,那表明系统处于您不乐意支持的状态,因此我不会继续尝试继续前进 - 快速中止通常是最好的选择。< / p>
您可能希望编写一个帮助方法,为您执行此操作,以使调用代码更清晰。