lock语句上的Java Coverity不定等待错误
对Java来说相对较新,但负责查看覆盖缺陷。这是我想的那么简单吗?(我无法说服代码所有者。) 我想我只是想把这个改成lock语句上的Java Coverity不定等待错误,java,coverity,Java,Coverity,对Java来说相对较新,但负责查看覆盖缺陷。这是我想的那么简单吗?(我无法说服代码所有者。) 我想我只是想把这个改成 synchronized(lock) while(!finished){ try lock.wait(); catch(InterruptedException e) log.error(e.getStackTrace()); } 这有意义吗?我真的需要在lock语句中移动while循环吗?您需要将
synchronized(lock)
while(!finished){
try lock.wait();
catch(InterruptedException e)
log.error(e.getStackTrace());
}
这有意义吗?我真的需要在lock语句中移动while循环吗?您需要将
已完成
声明为volatile
。然后您的解决方案就可以了。您需要将已完成
声明为易失性
。那么你的解决方案就可以了。我不得不这么做。在网站上找到了很好的信息。如果只有一种方法可以设置finished
,我仍然应该使用volatile
标志,但是我真的可以去掉synchronized
?不,这是wait()所需要的。移动代码和添加volatile对我来说也很有效,但我不完全理解Coverity最初抱怨的原因。即使在阅读了原因之后,关于这个问题仍然不清楚。我不得不寻找答案。在网站上找到了很好的信息。如果只有一种方法可以设置finished
,我仍然应该使用volatile
标志,但是我真的可以去掉synchronized
?不,这是wait()所需要的。移动代码和添加volatile对我来说也很有效,但我不完全理解Coverity最初抱怨的原因。即使在阅读了原因之后,仍然不清楚这个问题。
synchronized(lock)
while(!finished){
try lock.wait();
catch(InterruptedException e)
log.error(e.getStackTrace());
}