本文介绍了Locks AutoCloseable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Locks AutoCloseable?也就是说,而不是:

Are Locks AutoCloseable? That is, instead of:

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

我可以说:

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

Java 7中的

in Java 7?

推荐答案

不,界面(也不是 class)实现 AutoCloseable 接口,该接口与新的try-with-resource语法一起使用。

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.

这篇关于Locks AutoCloseable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-21 19:35