[英]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.