当使用Java的FileLock时,可以让close()自动执行lock.release()吗?
正如大多数人应该知道的那样,也关闭了任何流使用。close()
这允许以下代码:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(...)));
...
br.close();
这很好,因为我们不需要引用并记住关闭它。FileInputStream
但它也适用于s吗?FileLock
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();
}
我已经尝试了这个代码,并且锁在调用时被正确释放,但是这样做是安全的吗?Closeable JavaDoc说:“关闭这个流并释放与之相关的任何系统资源。我可以安全地假设我正在使用锁定指定的吗?br.close()
close()
release()