私は長い時間の問題を解決するために多くの方法を検索しますが、方法はまた、私の問題を解決することはできませんので、この問題を解決するためにあなたの助けが必要です、非常に非常にありがとう!update mongoはConcurrentModificationExceptionをスローしますか?
例外スタック:キー
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:977)
at java.util.HashMap$KeyIterator.next(HashMap.java:1012)
at org.bson.BSONEncoder.putIterable(BSONEncoder.java:258)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:198)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:140)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:190)
at org.bson.BSONEncoder.putIterable(BSONEncoder.java:259)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:198)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:140)
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:190)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:140)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:86)
at com.mongodb.OutMessage.putObject(OutMessage.java:190)
at com.mongodb.DBApiLayer$MyCollection.update(DBApiLayer.java:341)
at com.mongodb.DBCollection.update(DBCollection.java:150)
at com.autonavi.sns.util.TileCache.updateToMongo(TileCache.java:589)
at com.autonavi.sns.util.TileCache.updatePoint(TileCache.java:349)
at com.autonavi.sns.workflow.function.UpdatePointFunc.updatePoint(UpdatePointFunc.java:82)
at com.autonavi.sns.workflow.function.UpdatePointFunc.doExec(UpdatePointFunc.java:37)
at com.autonavi.sns.workflow.function.SNSFunction.execFunc(SNSFunction.java:42)
at com.autonavi.sns.workflow.function.SNSFunction.execFunc(SNSFunction.java:45)
at com.autonavi.sns.workflow.function.SNSFunction.execFunc(SNSFunction.java:45)
at com.autonavi.sns.workflow.function.SNSFunction.execFunc(SNSFunction.java:45)
at com.autonavi.sns.workflow.function.SNSFunction.execFunc(SNSFunction.java:45)
at com.autonavi.sns.workflow.SNSWorkFlow.startExec(SNSWorkFlow.java:45)
at com.autonavi.sns.workflow.SNSWorkFlow.execute(SNSWorkFlow.java:31)
at com.autonavi.sns.service.SNSThreadHandler.serviceDispacth(SNSThreadHandler.java:79)
at com.autonavi.sns.service.SNSThreadHandler.run(SNSThreadHandler.java:47)
at java.lang.Thread.run(Thread.java:662)
セット更新:モンゴする
BasicDBObject udbo = new BasicDBObject();
udbo.put(ConstantUtil.MONGO_ID_KEY, tileId);
List<BasicDBObject> plist = new ArrayList<BasicDBObject>();
for (PointBasic p : points) {
BasicDBObject pkey = new BasicDBObject();
boolean isPhysic = p.isPhysicPoint();
pkey.put("isphysic", isPhysic);
pkey.put("x", p.getX());
pkey.put("y", p.getY());
pkey.put("picurl", p.getPicUrl());
pkey.put("area", p.getArea());
plist.add(pkey);
}
BasicDBObject pdbo = new BasicDBObject();
pdbo.put("$set", new BasicDBObject("point", plist));
return this.updateToMongo(udbo, pdbo, TILE_LAYER);
更新キー:
private boolean updateToMongo(BasicDBObject udbo, BasicDBObject ukey, long layer) {
boolean flag = false;
try {
this.mongo = MongoDatabaseUtil.getInstance();
this.coll = mongo.getCollection(ConstantUtil.TILE_COLL + layer);
this.coll.update(udbo, ukey, true, true);
flag = true;
} catch (MongoException e) {
LOG.error("Mongo error : ", e);
}
return flag;
}
はい、私のアプリケーションはマルチスレッドですが、新しいクラスでupdateToMongoを呼び出すすべてのスレッドは、次にBasicDBObjectがupdateToMongoメソッドに影響しますか?ありがとうございました ! – dawnsky
はい、あなたは正しいです、MongoDatabaseUtilはシングルトンです。そして、私はメソッドupdateToMongoを呼び出すと、collNameを持つDBCollectionを1つだけ取得します – dawnsky