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