请教关于java.util.ConcurrentModificationException 问题

maidanlao4 2005-06-09 04:48:20
源程序:
synchronized void cleanUp(){
AccountImpl obj;

long now = System.currentTimeMillis();

Set keys = unlocked.keySet();
Iterator it = keys.iterator();

while( it.hasNext()){
System.out.println("进入了while!");
//下面这句便是AccountObjectPool.cleanUp (AccountObjectPool.java:168)所指
obj = (AccountImpl)it.next();
if( ( now - ( ( Long ) unlocked.get( obj ) ).longValue() ) > expirationTime )
{
//当要被清除出资源池的时候更新数据库,重新写入数据库
try{
database.updateAccount(obj.id,obj.name,obj.balance);
}catch(SQLException exc){
exc.printStackTrace();
}

//存在时间
unlocked.remove( obj );
obj = null;
}
}
System.out.println("clearUp执行完毕!");
//启动垃圾收集,清除没有对象引用的对象
System.gc();
}
运行后出现:

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.next(HashMap.java:731)
at AccountObjectPool.cleanUp(AccountObjectPool.java:168)
at CleanUpThread.run(CleanUpThread.java:30)

请各位大侠指教!!!
...全文
86 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2005-06-09
  • 打赏
  • 举报
回复
如果你这样做,最好是:
Set s = m.entrySet();
Iterator it = s.iterator();
while(it.hasNext()) {
Map.Entry entry = (Entry) it.next();
it.remove();
}

这样才能够正确的删除Map中的东西,其中entry是可以得到Key和Object两者的

62,614

社区成员

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

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