Java 多线程正确性-不一致的同步
这有什么问题Java 多线程正确性-不一致的同步,java,sonarqube,findbugs,Java,Sonarqube,Findbugs,这有什么问题 public final void setListValid(final List<ValidRes> listValidRes) { this.listValidRes = listValidRes; } public final void setListValid(final List listValidRes){ this.listValidRes=listValidRes; } 声纳对我喊道: xxx.listValidRes同步不一致;锁定50%的
public final void setListValid(final List<ValidRes> listValidRes) {
this.listValidRes = listValidRes;
}
public final void setListValid(final List listValidRes){
this.listValidRes=listValidRes;
}
声纳对我喊道:
xxx.listValidRes同步不一致;锁定50%的时间
有人知道我需要做什么吗?问题中给出的代码没有同步。我假设您在
this.listValidRes
代码中的其他地方进行同步。这正是Sonar告诉你的:如果你在一个资源上同步,那么在所有的使用中都同步,或者根本不同步,让其他人来处理
基本上,这是一个设计决策:
- 您可以选择不同步,并让客户机为此烦恼。其优点是,如果不进行同步,速度会明显加快。因此,如果您的类用于单线程设置,则最好放弃同步但是清楚地记录它不是线程安全的,否则客户端将使用它多线程并抱怨奇怪的错误
- 如果选择进行同步(或必须进行同步),则在每次使用关键资源时都进行同步。实现这一点有不同的方法。也许您想显示您实际同步的资源的使用情况。也许我或其他人可以给你一些好的建议
p
丢失了。现在一切就绪,很抱歉名字太长了。。我不想让它在这里混淆。我在问题中给出的代码中看不到任何同步。。。我想您可以在代码中的其他地方进行同步,而不是在这里进行同步……如果this.listValidRes
的所有其他用法都在同步块中,请在此处进行同步,或者显式地使接口“非线程安全”且不同步。然后,客户端必须处理线程。。。这是一个设计决定,但不管怎样:你不能混合。同步或不同步,但不是“有时”。