【问题标题】:ConcurrentModification Exception in ArrayListArrayList 中的 ConcurrentModification 异常
【发布时间】:2014-08-05 21:18:46
【问题描述】:

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

这是我的代码 sn-p

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

【问题讨论】:

  • 看来你走错了路。此代码块不应导致此异常。
  • 您的代码中还有哪些地方使用了mCallbacks?您是否在调用callAuthCallbacks() 之前的某个时间点遍历mCallbacks
  • 您始终可以创建自己的 ArrayList 子类,该子类在列表发生更改以及由谁更改时进行记录,然后将其替换。这始终是一种有趣的调试技术。
  • 是的,mCallbacks 在其他一些地方也得到了迭代,但它们太在 sync 块内
  • 嗯,这很奇怪。似乎不应该发生异常,如果我们都无法重现您的问题,那么帮助您将有些困难......试试ArrayList 子类的东西,看看是否有帮助?

标签: java android iterator synchronized


【解决方案1】:

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

Check out this link. And this link.

【讨论】:

  • 在我问这个问题之前我已经经历了这个。显然它解决了问题。
【解决方案2】:

答案是,在同一个线程中 synchronised(){} 不会工作。 即使您认为它有效,也可能存在死锁。

在我的情况下,我在调用回调的同一线程中从 ArrayList 中删除回调对象。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2013-06-22
    相关资源
    最近更新 更多