С введением try-with-resource
в Java 7 я был удивлен, увидев, что что 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, я думаю, что должно быть хорошее причина, по которой этого делать не следует. Кто-нибудь знает?