有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java多线程正确性不一致同步

这有什么问题

public final void setListValid(final List<ValidRes> listValidRes) {
    this.listValidRes = listValidRes;
}

声纳对我喊道:

Inconsistent synchronization of xxx.listValidRes; locked 50% of time

有人知道我需要做什么吗


共 (1) 个答案

  1. # 1 楼答案

    问题中给出的代码没有同步。我假设您在代码的其他地方的this.listValidRes上进行同步。这正是Sonar告诉你的:如果你在一个资源上进行同步,那么就按照所有的用法进行同步,或者根本不进行同步,让其他人来处理

    基本上,这是一个设计决策:

    • 您可以选择而不是同步,并让客户机为此烦恼。其优点是,如果不进行同步,速度会明显加快。因此,如果您的类用于单线程设置,则最好放弃同步但是清楚地记录它是而不是线程安全的,否则客户端使用它多线程并抱怨奇怪的错误

    • 如果选择进行同步(或必须进行同步),则在每次使用关键资源时都进行同步。实现这一点有不同的方法。也许您想显示您实际同步的资源的使用情况。也许我或其他人可以给你一些好的建议