lock语句上的Java Coverity不定等待错误

lock语句上的Java Coverity不定等待错误,java,coverity,Java,Coverity,对Java来说相对较新,但负责查看覆盖缺陷。这是我想的那么简单吗?(我无法说服代码所有者。) 我想我只是想把这个改成 synchronized(lock) while(!finished){ try lock.wait(); catch(InterruptedException e) log.error(e.getStackTrace()); } 这有意义吗?我真的需要在lock语句中移动while循环吗?您需要将

对Java来说相对较新,但负责查看覆盖缺陷。这是我想的那么简单吗?(我无法说服代码所有者。)

我想我只是想把这个改成

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());
        }