并发处理的问题,大家来看看这个exception

zhoupc8178 2009-05-02 09:23:02
public List getAll() {
List dataList = new ArrayList();
dataList.addAll(Collections.unmodifiableCollection(dataMap.values()));
return dataList;
}

这个方法在调用的时候另一个线程增加或删除了dataMap里的值,抛出了ConcurrentModificationException:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:1091)
at java.util.HashMap$ValueIterator.next(HashMap.java:1122)
at java.util.AbstractCollection.toArray(AbstractCollection.java:141)
at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1016)
at java.util.ArrayList.addAll(ArrayList.java:499)
at TestData.getAll(TestData.java:258)
如何解决呢?
...全文
90 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinxfei 2009-05-02
  • 打赏
  • 举报
回复
最好用现成同步,保证同一时刻只能有一个人访问。
zhoupc8178 2009-05-02
  • 打赏
  • 举报
回复
谢谢回复,确实是用HashMap实现的,我该用Hashtable试试
Looking_Glass 2009-05-02
  • 打赏
  • 举报
回复
个人认为:你的dataMap应该是用HashMap实现! 改用HashTable实现!因为他是线程安全!HashMap是线程不安全!

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧