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?
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.