【问题标题】:Do or will java.io methods on Android throw InterruptedIOException?Android 上的 java.io 方法是否会抛出 InterruptedIOException?
【发布时间】:2013-01-15 13:51:26
【问题描述】:

我知道在引入 InterruptedIOException 时没有太多选择;它必须是 IOException 的子类。

InterruptedIOException 的唯一存在无疑会让你想知道一个线程是否被中断了。那是因为如果你想维护线程被中断的信息,你必须区别对待 InterruptedIOExceptionIOException

虽然 InterruptedIOException 是为 java.nio 发明的,但据报道,至少在 Solaris 下,有 java.io 方法会抛出InterruptedIOException。此外,对于新的 Android 版本,库可能会从 java.io 迁移到 java.nio 或以某种方式映射其他方法。

我倾向于认为应该考虑 InterruptedIOException 以确保安全。你怎么看?见解、经验、策略?

【问题讨论】:

    标签: java android exception-handling interrupted-exception


    【解决方案1】:

    如果可以避免,我个人不会使用中断。对于阻塞 IO 操作,我会设置一个 volatile 标志并关闭流。如果已设置关闭标志,我将忽略任何抛出的 IOException。这使您可以更好地控制组件的关闭方式。一旦我将一个组件设置为closed,我当然不会取消设置,我可以随时检查它。

    【讨论】:

    • 谢谢分享。不过,在某些情况下,使用closed 信息来结束线程似乎并不容易。例如。如果您有一个旨在保持连接打开的线程(如果必须关闭则重新打开它)。
    • 如果应该在尝试重新连接之前检查closed 标志。如果组件不这样做,它应该支持关闭/停止/关闭方法
    • 是的。谢谢!我现在既没有使用中断也没有完全关闭,但你对中断的评估让我朝着正确的方向前进。
    猜你喜欢
    • 2022-01-01
    • 2010-12-06
    • 2010-10-09
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多