gpt4 book ai didi

java - Set 上的同步迭代如何因 ConcurrentModificationException 而失败

转载 作者:行者123 更新时间:2023-11-29 03:29:28 25 4
gpt4 key购买 nike

<分区>

我有一个存储数据并从多个线程调用的类。尽管对我的 Set 的每次访问都是同步的,但它因 ConcurrentModificationException 而失败。

这怎么会发生? synchronized 应该确保我的 Set 在迭代时没有改变......

这是我的类中所有访问 Set 的函数...

谁能告诉我这里出了什么问题?

private final Object mListenerLock = new Object();
private final Set<IRetainerBaseListener> mListeners = new HashSet<IRetainerBaseListener>();

protected final void register(IRetainerBaseListener listener)
{
synchronized (mListenerLock)
{
mListeners.add(listener);
}
}

protected final boolean unregister(IRetainerBaseListener listener)
{
synchronized (mListenerLock)
{
return mListeners.remove(listener);
}
}

private final void onObjectAdded(RKey key, Object data)
{
synchronized (mListenerLock)
{
Iterator<IRetainerBaseListener> it = mListeners.iterator();
while (it.hasNext())
{
IRetainerBaseListener listener = it.next();

/* EDIT */
/* I'm not changing the Set in here, never!!! */

// I can't insert the if's, but I just check the interface class
// and call one of the following methods:

((IRetainerListener) listener).onRetainerDataAdded(key, data);
// or
((IRetainerSingleKeyListener) listener).onRetainerDataAdded(data);

}
}
}

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