繁体   English   中英

Java 8上的java.nio.channels.AsynchronousClose异常

[英]java.nio.channels.AsynchronousClose Exception on Java 8

我刚刚将代码从Java 7 Windows移至Java 1.8 Linux,并且在同一代码库上获得了此堆栈跟踪

sun.nio.ch.SimpleAsynchronousFileChannelImpl $ 3.run(SimpleAsynchronousFileChannelImpl.java:380)上的java.nio.channels.AsynchronousCloseException [java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) )[rt.jar:1.8.0_92] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[rt.jar:1.8.0_92] at java.lang.Thread.run(Thread.java :745)[rt.jar:1.8.0_92]

我的代码如下

  Charset cs = Charset.forName("UTF-8");
        byte[] inputBytes = jsonString.getBytes(cs);
        fileChannel.write(ByteBuffer.wrap(inputBytes), 0, ByteBuffer.wrap(inputBytes),new CompletionHandler<Integer, ByteBuffer>() {

            @Override
            public void completed(Integer result, ByteBuffer attachment) {
                log.info("Async Saving site content completed for sitename");
            }

            @Override
            public void failed(Throwable exc, ByteBuffer attachment) {
                exc.printStackTrace();
                log.error("Async File Write Failed",exc);
                log.fatal(exc);
            }
        });

想知道发生了什么事。 任何帮助表示赞赏。

根据评论,我再次看了一下,上面的代码包含在try捕获中,带有带有FileStream“ close”方法调用的finally语句。 罪魁祸首是当另一个线程正在写入通道时,finally语句将关闭通道。

我删除了finally块,并将关闭文件流代码移到完成处理程序中,现在可以正常工作了。

注意:它在Windows中的工作方式仍然使我难以理解。 该代码仍部署在Windows服务器中,就在我编写此代码之前,我对其进行了重新测试,并且可以与其中的finally块一起使用:)。 无论如何都不会在此花费更多的时间。

标记已解决。 非常感谢所有的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM