【问题标题】:Java Lock - UnlockJava 锁 - 解锁
【发布时间】:2025-11-14 10:45:01
【问题描述】:
   java.util.concurrent.locks.ReentrantLock;                             

   Public boolean ABCD(final AbcModel abcModel) {
    final Lock lock = (Lock)this.xyz.get((Object)abcModel);
    lock.lock();
    try {
        return super.ABCD(abcModel);
    }
    finally {
        lock.unlock();
    }
}

此方法是否使线程和资源保持锁定?

【问题讨论】:

  • this.xyz 是什么?为什么需要将get()-result 转换为Lock
  • 读了很多遍之后,我仍然无法理解您的实际问题是什么。好像是 XY 问题。
  • 看起来有问题:该代码无法编译...
  • 不要专注于那部分。试想我锁定了某个对象,然后在解锁之前在“尝试”部分返回一些内容。
  • 我不得不更改名称,对此我很抱歉

标签: java locking reentrantlock


【解决方案1】:

此方法是否使线程和资源保持锁定?

没有。锁将在finally 块中解锁(释放)。这将发生在之后super.ABCD(abcModel) 调用完成,并且之前返回该调用的结果。

这直接来自finally 的指定行为;例如请参阅 Java Oracle 教程中的 JLS 14.20.2Exceptions > The finally block,其中指出:

“运行时系统总是执行 finally 块中的语句,而不管 try 块中发生什么。”


...尽管它在前面几句话中提到 JVM 退出是“总是”的例外。

【讨论】: