[Java记录]try-with-resources的一个坑

【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 特性给关闭了,悲伤的故事。

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

分类:Android 时间:2015-05-10 人气:2271
本文关键词:
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.041 (s). 12 q(s)