Tag: raii

java.util.concurrent.locks.Lock的AutoCloseable包装中的任何风险?

通过Java 7中引入的try-with-resource ,我惊讶地发现Lock还没有被改装为AutoCloseable 。 它似乎相当简单,所以我自己添加如下: class Lock implements AutoCloseable { private final java.util.concurrent.locks.Lock _lock; Lock(java.util.concurrent.locks.Lock lock) { _lock = lock; _lock.lock(); } @Override public void close() { _lock.unlock(); } } 这适用于AutoCloseableReentrantReadWiteLock类,用法如下: try (AutoCloseableReentrantReadWiteLock.Lock l = _lock.writeLock()) { // do something } 由于这似乎是直接和规范使用自动关闭RAII我认为必须有一个很好的理由不应该这样做。 有人知道吗?

Java中的RAII ……资源处理总是那么难看?

我刚刚玩了Java文件系统API,并提供了以下函数,用于复制二进制文件。 最初的源代码来自Web,但我添加了try / catch / finally子句,以确保在退出函数之前,如果发生错误,将关闭缓冲区流(因此,我的操作系统资源被释放)。 我减少了function以显示模式: public static void copyFile(FileOutputStream oDStream, FileInputStream oSStream) throw etc… { BufferedInputStream oSBuffer = new BufferedInputStream(oSStream, 4096); BufferedOutputStream oDBuffer = new BufferedOutputStream(oDStream, 4096); try { try { int c; while((c = oSBuffer.read()) != -1) // could throw a IOException { oDBuffer.write(c); // could throw a IOException } } finally […]