在使用 ArrayList 时,有时会出现 ArrayList 重置(resets)的问题,即在程序运行时,ArrayList 中的元素数量会突然变为 0。这通常是由于在多线程环境下对 ArrayList 进行不正确的操作所导致的。
为了解决这个问题,可以使用 synchronized 关键字来确保在多线程环境下 ArrayList 的安全访问。下面是一个简单的示例代码,在这个代码中,ArrayList 的每次修改都被包装在一个 synchronized 代码块中:
import java.util.ArrayList;
public class SynchronizedArrayList {
private ArrayList arrayList = new ArrayList<>();
public void add(String str) {
synchronized (arrayList) {
arrayList.add(str);
}
}
public void remove(String str) {
synchronized (arrayList) {
arrayList.remove(str);
}
}
// other methods...
public ArrayList getArrayList() {
synchronized (arrayList) {
return new ArrayList<>(arrayList);
}
}
}
在这个代码中,使用 synchronized 关键字来确保每个方法在修改 ArrayList 时都是线程安全的。另外,对于需要访问 ArrayList 的方法,也需要确保访问的线程是安全的。在 getArrayList() 方法中使用了一个新的 ArrayList 来返回数组列表的副本,以避免在返回值之后修改列表。