我們有以下多段被調用的代碼。問題是它在100個請求spring registerBeanDefinition throws java.util.ConcurrentModificationException
BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
boolean beanDefExists = registry.containsBeanDefinition(beanName);
if (!beanDefExists) {
BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
beanDefBuilder.setScope(BeanDefinition.SCOPE_PROTOTYPE);
beanDefBuilder.setLazyInit(false);
registry.registerBeanDefinition(beanName, beanDefBuilder.getBeanDefinition());
}
13:18:10,728 INFO [stdout] (http-executor-threads - 33) java.util.ConcurrentModificationException: null 13:18:10,728 INFO [stdout] (http-executor-threads - 33) at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) ~[na:1.6.0_45] 13:18:10,729 INFO [stdout] (http-executor-threads - 33) at java.util.AbstractList$Itr.next(AbstractList.java:343) ~[na:1.6.0_45] 13:18:10,729 INFO [stdout] (http-executor-threads - 33) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resetBeanDefinition(DefaultListableBeanFactory.java:714) ~[spring-beans-3.2.2.RELEASE.jar:3.2.2.RELEASE] 13:18:10,729 INFO [stdout] (http-executor-threads - 33) at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:675) ~[spring-beans-3.2.2.RELEASE.jar:3.2.2.RELEASE]
一次投擲java.util.ConcurrentModificationException是否有人可以提供針對此問題的解決方案?
你爲什麼認爲'containsBeanDefinition'運行在它自己的線程中? – 2014-12-03 20:22:06
我在哪裏說的? :) – lmazgon 2014-12-03 20:22:59
也許我誤解了。你在這裏談論的是什麼線程:_So如果你打到正確的時刻,你將會添加一個bean到集合中,而另一個線程正在迭代它。 – 2014-12-03 20:23:31