gpt4 book ai didi

java - 收到 ConcurrentModificationException 但我没有删除

转载 作者:行者123 更新时间:2023-12-01 07:38:01 27 4
gpt4 key购买 nike

使用此代码我会得到什么ConcurrentModificationException?我有一个同步(监听器)锁。

private void notifyListeners(MediumRendition rendition) {
if (rendition == null) return;
synchronized (listeners) {
for (RenditionEventListener l : listeners) {
if (l.renditionType.equals(rendition.getType()) && l.mediumId == rendition.getMediumId()) {
l.listener.onRendition(rendition);
}
}
}
}

public void put(String renditionType, long mediumId, MediumRendition rendition) {
HashMap<Long, MediumRendition> l = list.get(renditionType);
if (l == null) {
l = new HashMap<Long, MediumRendition>();
list.put(renditionType, l);
}
l.put(mediumId, rendition);
notifyListeners(rendition);
}

public void addRenditionListener(String renditionType, long mediumId, RenditionListener listener) {
synchronized (listeners) {
listeners.add(new RenditionEventListener(renditionType, mediumId, listener));
}
}

01-30 16:47:55.147 6953 6974 E AndroidRuntime: FATAL EXCEPTION: Thread 1 01-30 16:47:55.147 6953 6974 E AndroidRuntime: java.util.ConcurrentModificationException 01-30 16:47:55.147 6953 6974 E AndroidRuntime: at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573) 01-30 16:47:55.147 6953 6974 E AndroidRuntime: at com..vos.RenditionList.notifyListeners(RenditionList.java:79) 01-30 16:47:55.147 6953 6974 E AndroidRuntime: at com.t.vos.RenditionList.put(RenditionList.java:41) 01-30 16:47:55.147 6953 6974 E AndroidRuntime: at com.*.controllers.OmwController$6.run(OmwController.java:212)

已解决:显然我正在删除。见下文。

最佳答案

该异常表明监听器可能已从另一个线程修改。因此,您应该检查它是否在其他地方没有同步的情况下被修改。

还要检查 onRendition() 的实现是否从列表中删除监听器,因为如果不涉及多个线程,这可能是另一个原因。

关于java - 收到 ConcurrentModificationException 但我没有删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9073100/

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