gpt4 book ai didi

java - "inconsistent synchronization"是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:00:33 25 4
gpt4 key购买 nike

这是我的 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
}
}
}
}

Findbugs 说:

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

这是什么意思,我做错了什么?当两个或多个客户端同时调用 Foo.scan() 时,我试图避免出现问题。

最佳答案

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

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

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
}
}
}
}

关于java - "inconsistent synchronization"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com