gpt4 book ai didi

java - ArrayList 上的同步

转载 作者:行者123 更新时间:2023-12-01 18:15:30 25 4
gpt4 key购买 nike

我有一个像这样的循环:

synchronized(list) {
int objectsN = list.size();
for (int i=0; i < objectsN; i++) {
// Do stuff...
}
}

list 是此代码所在对象的最终字段。

然后我在同一个对象中有一个方法,它调用 list.remove(index) ,当某个线程在无限循环中执行上面的代码列表时,另一个线程会调用它(使用在单个周期之间 sleep ),有时它会崩溃并给出 IndexOutOfBoundsException。

如何正确同步此列表?

最佳答案

同步remove语句可以解决并发问题。

synchronized (list) {
list.remove(index);
}

如果您使用 Java 8,则在定义列表并调用 list.foreach(currentElement -> {//Do stuff... 时,可以使用 Collections.synchronizedList(list) })

private List<?> list;

public Constructor(list) {
this.list = Collections.synchronizedList(list);
}

public void loopingMethod() {
list.foreach(currentElement -> {// Do stuff...});
}

public void deletingMethod(int index) {
list.remove(index); // This assumes the index is within bound
}

关于java - ArrayList 上的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827960/

25 4 0