gpt4 book ai didi

java - ArrayList 中的 ConcurrentModification 异常

转载 作者:行者123 更新时间:2023-11-30 11:17:42 25 4
gpt4 key购买 nike

我知道对此有很多问题,但在我的例子中,我将它放在一个同步块(synchronized block)中,我确信没有人会更改我的数组列表。但是如果我使用 for-每个循环.. 为什么?

这是我的代码 fragment

    final static Object mLock = new Object();
private static ArrayList<ConnectionAndAuthCallback> mCallbacks;
private void callAuthCallbacks() {
synchronized (mLock) {

if (mCallbacks != null)
for (ConnectionAndAuthCallback calback : mCallbacks) { //here i get exception
calback.onAuthentication(mToken, calback.intent);
}
}
}

这是我在回调上做的代码

@Override
public void onAuthentication(String token, Intent intent) {
web.loadUrl("xyz.com");
//unregister so that we wong get any exception or some more callbacks
SameClass.unRegisterAuthCallbacks(this);
}

在注销函数中

public static void unRegisterAuthCallbacks(ConnectionAndAuthCallback callback) {
synchronized (mLock) {

if (mCallbacks != null)
if (mCallbacks.contains(callback)) {
mCallbacks.remove(callback); // This causing problem ?? In same thread "syncronised" wont work ??
}
}
}

最佳答案

在这种情况下,您不能对 ArrayList 或 remove() 执行修改,因为您当前正在读出或循环遍历。请改用迭代器。

Check out this link. And this link.

关于java - ArrayList 中的 ConcurrentModification 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24237082/

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