gpt4 book ai didi

java - java.util.concurrent.locks.Lock 的 AutoCloseable 包装器有任何风险吗?

转载 作者:太空狗 更新时间:2023-10-29 22:45:57 25 4
gpt4 key购买 nike

try-with-resource在 Java 7 中引入,我很惊讶地看到 Lock尚未 retrofit 为 AutoCloseable .看起来很简单,所以我自己添加了如下:

class Lock implements AutoCloseable {
private final java.util.concurrent.locks.Lock _lock;
Lock(java.util.concurrent.locks.Lock lock) {
_lock = lock;
_lock.lock();
}
@Override
public void close() {
_lock.unlock();
}
}

这与 AutoCloseableReentrantReadWiteLock 类一起使用,用法如下:

try (AutoCloseableReentrantReadWiteLock.Lock l = _lock.writeLock()) {
// do something
}

因为自动关闭的使用看起来如此简单和规范 RAII我认为一定有充分的理由不应该这样做。有人知道吗?

最佳答案

try-with-resources 在 2009 年 2 月/3 月提出时,这是一场大辩论。

提案作者 Josh Bloch 说“This construct was designed for one thing and one thing only: resource management. It was not designed for locking.

有一个单独的提案来单独涵盖锁,但没有任何进展。

我认为未涵盖锁的主要原因是:

  • 无法在 Java 7 中向接口(interface)添加方法
  • 创建实现正确接口(interface)的额外包装器对象的性能影响
  • 哲学上反对 Lock 是一种不同于文件句柄的资源(例如,创建 Lock 并不需要调用 lock 方法)

您可以在 the archive page 上关注所有历史讨价还价,例如 this thread .

关于java - java.util.concurrent.locks.Lock 的 AutoCloseable 包装器有任何风险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16574353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com