2015-04-17 124 views
0

如果我在單個線程中運行我的程序,我沒有看到任何異常。該問題僅在多線程環境中發生,多線程正在同時讀取和寫入相同的集合。我沒有固定的測試用例,因爲這是在我的代碼的不同位置隨機發生的。它發生在同一個API上,我使用FindOne函數調用從數據庫中獲取一條記錄。併發修改異常使用springframework mongotemplate findone api

java.util.ConcurrentModificationException 
     at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) 
     at java.util.ArrayList$Itr.next(ArrayList.java:831) 
     at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:305) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:266) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:230) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readCollectionOrArray(MappingMongoConverter.java:898) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1159) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access$200(MappingMongoConverter.java:77) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1110) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:861) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:278) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter$1.doWithPersistentProperty(MappingMongoConverter.java:266) 
     at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:307) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:266) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:230) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:190) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:186) 
     at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:77) 
     at org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:2128) 
     at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1766) 
     at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1582) 
     at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:497) 
+0

你能提供任何代碼示例嗎? – codingadventures

回答

0

您正在運行帶有非線程安全函數的多線程代碼。您將需要添加鎖以防止從多個線程訪問相同的數據。