小编典典

锁是否可以自动关闭?

java

是否可以Locks自动关闭?即,代替:

Lock someLock = new ReentrantLock();
someLock.lock();
try
{
    // ...
}
finally
{
    someLock.unlock();
}

…我能说......么:

try (Lock someLock = new ReentrantLock())
{
    someLock.lock();
    // ...
}

…在Java 7中?


阅读 217

收藏
2020-10-09

共1个答案

小编典典

不,该Lock接口(也不是ReentrantLock该类)都未实现该AutoCloseable接口,而新的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();
    // ...
}

我认为您最好还是坚持使用旧语法。使锁定逻辑完全可见是更安全的。

2020-10-09