当前位置: 首页 > 面试题库 >

锁是否可以自动关闭?

子车轶
2023-03-14
问题内容

是否可以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语法必须使用该接口。

如果您想使其工作,可以编写一个简单的包装器:

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();
    // ...
}

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



 类似资料:
  • 问题内容: 我在不同的应用程序中有两个模型:modelA和modelB。他们有一对一的关系。django有什么方法可以在保存模型A时自动创建并保存模型B? 当我保存一个新的ModelA时,我想要一个条目自动保存在ModelB中。我怎样才能做到这一点?有没有一种方法可以在ModelA中指定呢?还是这不可能,我只需要在视图中创建并保存ModelB? 编辑说模型在不同的应用程序中。 问题答案: 看看dj

  • 问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0

  • 问题内容: 从技术上讲,Java中的线程自身可能死锁吗? 不久前,我在一次采访中被问到这是不可能的,但采访者告诉我这是可能的。不幸的是,我无法获得他的方法来解决这种僵局。 这让我开始思考,我唯一能想到的就是发生这种情况的地方是您拥有一个RMI服务器进程,其中包含一个调用自身的方法。调用该方法的代码行放置在同步块中。 甚至有可能还是面试官不正确? 我一直在考虑的源代码遵循这些原则(其中testDea

  • 问题内容: javascript中的函数通过保持与其隐藏范围的(隐藏)链接来形成关闭。 当我们拥有函数(作为变量值)时,是否可以通过编程方式访问它? 真正的目标是理论上的,但一个演示可能是列出闭合的属性。 问题答案: 这是关闭的目的之一(使信息保密)。由于该函数已经执行,因此它的作用域变量不再可从外部获得(并且从未使用过)-只有在其作用域中执行的函数(仍然)可以访问。 但是,您可以通过getter

  • 伙计们对BrowserStack还不熟悉。 任何建议都将得到高度赞赏,因为它将解决我前面的路障

  • 问题内容: 一个简单的问题:即使您不知道所有字段,也可以将所有数据发布到页面上吗? 例如,我想编写一个简单的脚本来收集所有发布的数据并通过电子邮件发送。我可以预见,表单中的字段可能会随着时间的推移而发生很大变化,因此从长远来看可以节省一些时间,我想知道是否可以编写自动收集所有内容的内容? 可能吗? 问题答案: 当然。只需遍历数组即可: