博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java记录】try-with-resources的一个坑
阅读量:5903 次
发布时间:2019-06-19

本文共 1394 字,大约阅读时间需要 4 分钟。

  hot3.png

##【Java记录】try-with-resources的一个坑

今天处理 AsynchronousFileChannel 时候的一个问题,代码如下:

public static void main(String[] args) throws Exception {    String filePath = "/home/xe/git/osc/JavaNote/Lang/data/Test.java";    ExecutorService executorService = Executors.newSingleThreadExecutor();    Set
openOptions = new HashSet<>(Arrays.asList(new StandardOpenOption[]{StandardOpenOption.READ})); try (AsynchronousFileChannel asynchronousFileChannel = AsynchronousFileChannel.open(Paths.get(filePath), openOptions, executorService)) { ByteBuffer buffer = ByteBuffer.allocate(1024); asynchronousFileChannel.read(buffer, 0, buffer, new CompletionHandler
() { @Override public void completed(Integer result, ByteBuffer attachment) { System.out.println("completed,result = " + result); executorService.shutdown(); } @Override public void failed(Throwable exc, ByteBuffer attachment) { System.out.println("failed"); exc.printStackTrace(); executorService.shutdown(); } }); } catch (Exception e) { }}

一直提示:

java.nio.channels.AsynchronousCloseException

一直找不到问题的原因,因为我并没有显式的去关闭 AsynchronousFileChannel,后来才发现,是被 try-with-resources 特性给关闭了,悲伤的故事。

所以,在异步调用中, 还是谨慎的处理通告的关闭操作比较好。

转载于:https://my.oschina.net/xesam/blog/413018

你可能感兴趣的文章
Microsoft® Deployment Toolkit 2010之快速部署Windows 7
查看>>
vue中this.$router.push()传参简单说明
查看>>
html中base标签的用处
查看>>
PHP中$_FILES的使用及注意事项
查看>>
LNMP的技术讲解
查看>>
前端基础入门一(HTML)
查看>>
出现:意外的预编译头错误,只需重新运行编译器就可能修复此问题
查看>>
再不努力,就真的没有机会了
查看>>
SVN Hooks的介绍及使用
查看>>
【Demo】HTML5 拍照上传
查看>>
路由器设置密码和标语
查看>>
CSS3属性
查看>>
Oracle 字符集的查看和修改【上】
查看>>
JQuery 基础操作
查看>>
OSPF 精髓 5类LSA 和RIP综合实验
查看>>
nginx缓存设置
查看>>
linux 脚本之 expect命令使用
查看>>
Java面向对象基础
查看>>
Fedora 安装fcitx输入法
查看>>
沃通SSL证书支持ECC算法吗?
查看>>