使用此代碼我得到ConcurrentModificationException
?我有一個同步(偵聽器)鎖。獲取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ÊAndroidRuntime:致命異常:線程1 01-30 16:47:55.147 6953 6974ÊAndroidRuntime:java.util.ConcurrentModificationException 01-30 E:AndroidRuntime:在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èAndroidRuntime:。在COM * controllers.OmwController $ 6.run(OmwController.java:212)
解決:顯然我被移除。見下文。
['CME's(docs)](http://docs.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html)不一定是由*不同*線程。 – 2012-01-31 01:05:30
還有什麼可以訪問聽衆?它是否也是同步的? – 2012-01-31 01:08:45
...所以如果是這樣的話,怎麼樣? – user123321 2012-01-31 01:09:23