Are Locks
auto-closeable? That is, instead of:
Lock someLock = new ReentrantLock(); someLock.lock(); try { // ... } finally { someLock.unlock(); }
…can I say:
try (Lock someLock = new ReentrantLock()) { someLock.lock(); // ... }
…in Java 7?
Advertisement
Answer
No, neither the Lock
interface (nor the ReentrantLock
class) implement the AutoCloseable
interface, which is required for use with the new try-with-resource syntax.
If you wanted to get this to work, you could write a simple wrapper:
public class LockWrapper implements AutoCloseable { private final Lock _lock; public LockWrapper(Lock l) { this._lock = l; } public void lock() { this._lock.lock(); } public void close() { this._lock.unlock(); } }
Now you can write code like this:
try (LockWrapper someLock = new LockWrapper(new ReentrantLock())) { someLock.lock(); // ... }
I think you’re better off sticking with the old syntax, though. It’s safer to have your locking logic fully visible.