我知道引入InterruptedIOException时没有太多选择。它必须是IOException的子类。
如果您想知道线程是否被中断,那么InterruptedIOException的唯一存在无疑会使生活变得有些复杂。这是因为如果要维护线程被中断的信息,则必须将InterruptedIOException与IOException区别对待。
尽管为java.nio发明了InterruptedIOException,但有报道称,至少在Solaris下,有一些java.io方法会抛出InterruptedIOException。同样,在新的Android版本中,库从java.io迁移到java.nio或以某种方式映射其他方法的风险很大。
我倾向于认为应该将InterruptedIOException放在安全的一边。你怎么看?见识,经验,策略?
最佳答案
就个人而言,如果可以避免的话,我不会使用中断。为了阻止IO操作,我将设置一个volatile标志并关闭流。如果设置了close标志,则忽略任何IOException抛出。这使您可以更好地控制组件的关闭方式。将组件设置为closed
后,我当然不会取消设置,并且可以根据需要多次检查。