当前位置:  开发笔记 > 编程语言 > 正文

使用Java的FileLock时,是否可以让close()自动执行lock.release()?

如何解决《使用Java的FileLock时,是否可以让close()自动执行lock.release()?》经验,为你挑选了1个好方法。

大多数人应该知道close()也关闭任何流使用.

这允许以下代码:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();

这很好,因为我们不需要引用FileInputStream并记得关闭它.

但是它也适用于FileLocks吗?

final FileInputStream fis = new FileInputStream(new File("buffer.txt"));
final FileChannel c = fis.getChannel();
final FileLock lock = c.lock(0L, Long.MAX_VALUE, true);
final BufferedReader br = new BufferedReader(new InputStreamReader(fis));

try {
    while(br.ready()) {
        System.out.println(br.readLine());
    }
} finally {
    br.close();
}

我已经尝试过这段代码并且在br.close()调用时正确释放了锁,但这样做是否安全?该可关闭的JavaDoc说,"关闭此流并释放与之关联的所有系统资源." 我可以安全地假设我正在使用锁定close()指定release()的吗?



1> sblundy..:

根据JavaDoc:

它通过调用release方法,关闭用于获取它的通道,或者通过Java虚拟机的终止(以先到者为准)来释放锁之前一直有效.

以下是内容 FileInputStream.close()

public void close() throws IOException {
    if (channel != null)
        channel.close();
    close0();
}

看起来close在流上关闭了释放锁的通道.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有