【问题标题】:Why are we getting ClosedByInterruptException from FileChannel.map in Java 1.6?为什么我们在 Java 1.6 中从 FileChannel.map 获得 ClosedByInterruptException?
【发布时间】:2009-07-21 19:36:47
【问题描述】:

我们的一位客户偶尔抱怨说,我们对FileChannel.map 的调用会以ClosedByInterruptException 失败。 Javadoc 并未将此列为合法的可能性。有谁知道这里可能发生了什么?

原因0:java.nio.channels.ClosedByInterruptException Cause0-StackTrace: 在 java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:184) 在 sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:772)

【问题讨论】:

    标签: java nio jdk1.6


    【解决方案1】:

    通道操作绑定到执行操作的线程。如果该线程被中断,则由于 IO 安全问题而关闭流/通道。

    【讨论】:

    • 什么样的操作会导致这样的中断?如果我想编写一个测试用例,我会让它做什么?为什么在映射文件的过程中会中断线程?那么克莱尔呢?
    • 如果应用程序是多线程的,您应该寻找#interrupt()-调用可能会中断线程在通道上执行 IO 操作。如果这是一个 web 应用程序或其他类型的托管环境,其中线程管理不取决于您的应用程序(如 Servlet / EJB 容器),您应该寻找线程安全违规。另一个需要关注的地方是应用程序关闭或使用线程池时(Servlet/EJB 容器!)。然后注意池大小的动态管理! java.sun.com/javase/6/docs/api/java/lang/…
    【解决方案2】:

    最后一条评论包含答案。有一个线程池正在使用,并在关闭时传递中断。

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      相关资源
      最近更新 更多