是否可以Locks自动关闭?即,代替:
Locks
Lock someLock = new ReentrantLock(); someLock.lock(); try { // ... } finally { someLock.unlock(); }
…我能说......么:
try (Lock someLock = new ReentrantLock()) { someLock.lock(); // ... }
…在Java 7中?
不,该Lock接口(也不是ReentrantLock该类)都未实现该AutoCloseable接口,而新的try- with-resource语法必须使用该接口。
Lock
ReentrantLock
AutoCloseable
如果您想使其工作,可以编写一个简单的包装器:
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(); } }
现在您可以编写如下代码:
try (LockWrapper someLock = new LockWrapper(new ReentrantLock())) { someLock.lock(); // ... }
我认为您最好还是坚持使用旧语法。使锁定逻辑完全可见是更安全的。