我有一门课是这样的:
class Foo {
final ReadWriteLock lock = new ReentrantReadWriteLock();
Object read() {
lock.readLock().lock();
Object result;
try {
result = getResource();
} finally {
lock.readLock().unlock();
}
return result;
}
}使用read标记方法Unreleased Resource: Synchronization,声称获得了锁,然后在没有释放锁的情况下直接退出该方法。
我的预感是,由于lock字段的接口类型为ReadWriteLock,Fortify无法确定lock.readLock()为两个调用返回相同的Lock对象。因此,Fortify看到我们锁定的Lock不是存储在局部变量中,它认为Lock因此丢失和泄漏。这是正确的吗?
发布于 2018-05-22 20:42:18
我的直觉是对的。Fortify无法判断lock.readLock()是否为两个调用返回相同的Lock对象,并且将锁存储在final局部变量中解决了这个问题。
https://stackoverflow.com/questions/50121774
复制相似问题