作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我应该如何在加入其他线程时处理 InterruptedException
,假设我实际上没有预料到会被打断,并且没有明智的做法?吞下异常?
try
{
t.join();
u.join();
}
catch (InterruptedException e)
{
// should not happen
}
或者我应该将每个 join
放在其单独的 try/catch
中,这样如果 InterruptedExeption
确实 发生了在加入 t
时,至少 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!
}
}
附带说明一下,有没有 InterruptedExeption
不会让我的代码看起来难看的情况? :)
最佳答案
如果某些事情不应该发生,您可能想知道它是否曾经确实发生过 - 让它显而易见的最好方法通常是抛出一个 RuntimeException
一些描述(例如 IllegalStateException
)。如果你没有预料到被打断的可能性,这表明系统处于你不太乐意支持的状态,所以我不会尝试继续前进——快速中止通常是最好的选择。
您可能想编写一个辅助方法来为您执行此操作,以使调用代码更清晰。
关于java - 在加入其他线程时被打断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265656/
我是一名优秀的程序员,十分优秀!