Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tryLock未释放资源_Java_Multithreading_Concurrency_Locking_Fortify - Fatal编程技术网

Java tryLock未释放资源

Java tryLock未释放资源,java,multithreading,concurrency,locking,fortify,Java,Multithreading,Concurrency,Locking,Fortify,以下代码已被Fortify标记为违规(锁的“未释放资源”) 你能解释一下原因吗?InterruptedException try/catch是否应该有finally语句?我认为内部审判也会处理这个案子 强化文档描述如下: 程序可能无法释放系统资源 你的例子不是这样的。如果tryLock返回false或抛出异常,则未获取锁,未输入try块,并且没有要释放的内容(因此外部try块中不需要finally块)。如果tryLock返回true,则输入内部try块并在finally中释放锁 您所拥有的似乎与

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


你能解释一下原因吗?InterruptedException try/catch是否应该有finally语句?我认为内部审判也会处理这个案子

强化文档描述如下:

程序可能无法释放系统资源

你的例子不是这样的。如果tryLock返回false或抛出异常,则未获取锁,未输入try块,并且没有要释放的内容(因此外部try块中不需要finally块)。如果tryLock返回true,则输入内部try块并在finally中释放锁

您所拥有的似乎与建议您如何做到这一点相同:

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

唯一的区别是您的示例使用了超时的tryLock覆盖,在这种情况下,它返回false。因此,从发布的内容来看,这似乎是正常的。

这只是
锁接口吗?我认为这是一个强化错误-代码看起来不错。@Boristeider我想你是对的还有另一个关键区别:本地
变量。如果OP引用的是一个类成员,那么在保持锁的同时引用可能被替换。@shmosel:这是一个有趣的观点。但是如果锁被替换了,似乎会出现更严重的问题。我不是说会,只是Fortify不能确定。@shmosel:静态代码分析肯定有它的局限性。
  Lock lock = ...;
  if (lock.tryLock()) {
      try {
          // manipulate protected state
      } finally {
          lock.unlock();
      }
  } else {
      // perform alternative actions
  }