文档章节

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

xesam
 xesam
发布于 2015/05/10 19:50
字数 182
阅读 158
收藏 2

##【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<OpenOption> 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<Integer, ByteBuffer>() {
            @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 特性给关闭了,悲伤的故事。

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

© 著作权归作者所有

xesam
粉丝 30
博文 77
码字总数 44843
作品 0
武汉
程序员
私信 提问
Java SE7新特性之try-with-resources语句

try-with-resources语句是一个声明一个或多个资源的 try 语句。一个资源作为一个对象,必须在程序结束之后随之关闭。 try-with-resources语句确保在语句的最后每个资源都被关闭 。任何实现了...

Edwyn王
2016/02/26
54
0
在 JDK 9 中更简洁使用 try-with-resources 语句

原本同步至 本文详细介绍了自 JDK 7 引入的 try-with-resources 语句的原理和用法,以及介绍了 JDK 9 对 try-with-resources 的改进,使得用户可以更加方便、简洁的使用 try-with-resources...

waylau
2016/02/03
2K
7
Java try-with-resources

try-with-resources 是个语法糖,实际上就是自动调用资源的 close() 函数 try 语句多了个括号,这种在 try 后面加个括号,再初始化对象的语法就叫 try-with-resources,上面代码等同于 编绎器...

林塬
2018/02/01
0
0
浅谈AutoCloseable接口

一、前言 最近在翻看中间件源码时候发现有些类实现了AutoCloseable接口,这个接口很生疏,所以搜了下资料,学习了下,下面做个总结。 二、AutoCloseable接口由来 从AutoCloseable的注释可知它...

今天你不奋斗明天你就落后
2017/11/25
0
0
Java 代码字节:足智多谋的 Try-With-Resources

本文由ImportNew -PJing 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 当通过 Java 实现业务实例时,对资源进行处理是司空见惯的。一般情况下,资源(如文件或 socket 句柄)封装在对...

ImportNew
2018/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部