“不一致同步”是什么意思?

2024-04-19

这是我的 Java 1.6 类:

public class Foo {
  private ArrayList<String> names;
  public void scan() {
    if (names == null) {
      synchronized (this) {
        this.names = new ArrayList<String>();
        // fill the array with data
      }
    }
  }
}

查找错误 说:

Inconsistent synchronization of com.XXX.Foo.names; locked 40% of time

这是什么意思以及我做错了什么?我试图避免两个或多个客户致电时出现问题Foo.scan()同时。


这是因为您仅在设置时才进行同步names变量而不是当你阅读它时。因此,在读取和写入之间,另一个线程可以执行,您将创建两个 ArrayList 并用数据填充它们,创建的第一个将被 GC 回收。

您需要将同步块放在读取和写入周围,或者将同步修饰符添加到方法中。

public class Foo {
  private ArrayList<String> names;
    public void scan() {
      synchronized (this)
        if (names == null) {
           this.names = new ArrayList<String>();
           // fill the array with data
         }
       }
     }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“不一致同步”是什么意思? 的相关文章

随机推荐