gpt4 book ai didi

java - tryLock 未释放的资源

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:30 27 4
gpt4 key购买 nike

以下代码已被 Fortify 标记为违规(锁的“未释放资源”)

try {
if (lock.tryLock(1, TimeUnit.SECONDS)) {
try {
//do something
}
finally {
lock.unlock();
}
}
catch (InterruptedException e) {
// something
}

你能解释一下为什么吗? InterruptedException try/catch 是否应该有一个 finally 语句?我认为内部尝试也可以处理这种情况。

最佳答案

Fortify 文档描述了 unreleased resource bug作为:

The program can potentially fail to release a system resource.

您的示例并非如此。如果 tryLock 返回 false 或抛出异常,则不会获取任何锁,不会进入 try block ,也不会释放任何内容(因此外部 try block 中不需要 finally block )。如果 tryLock 返回 true,则进入内部 try block 并在 finally 中释放锁。

您所拥有的似乎与 API documentation 相同建议您这样做:

  Lock lock = ...;
if (lock.tryLock()) {
try {
// manipulate protected state
} finally {
lock.unlock();
}
} else {
// perform alternative actions
}

唯一的区别是您的示例使用超时的 tryLock 覆盖,在这种情况下它返回 false。所以从发布的内容来看,这似乎没问题。

关于java - tryLock 未释放的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019878/

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