多线程java代码的java.util.ConcurrentModificationException
在多线程中运行java代码时,我在“String name=(String)keys.next();”行中得到了ConcurrentModificationException。导致错误的函数部分如下所示:多线程java代码的java.util.ConcurrentModificationException,java,multithreading,Java,Multithreading,在多线程中运行java代码时,我在“String name=(String)keys.next();”行中得到了ConcurrentModificationException。导致错误的函数部分如下所示: if (inputStr == null) return null; String tempStr = new String(inputStr); Properties props = System.getProperties(); Iterato
if (inputStr == null)
return null;
String tempStr = new String(inputStr);
Properties props = System.getProperties();
Iterator keys = props.keySet().iterator();
while (keys.hasNext()) {
String name = (String) keys.next();
String value = props.getProperty(name);
//Build a pattern and compile it
String patternStr = "%" + name + "%";
Pattern pattern = Pattern.compile(patternStr);
// Replace all occurrences of pattern in input string
Matcher matcher = pattern.matcher(tempStr);
tempStr = matcher.replaceAll(value);
}
stacktrace详细信息如下:
if (inputStr == null)
return null;
String tempStr = new String(inputStr);
Properties props = System.getProperties();
Iterator keys = props.keySet().iterator();
while (keys.hasNext()) {
String name = (String) keys.next();
String value = props.getProperty(name);
//Build a pattern and compile it
String patternStr = "%" + name + "%";
Pattern pattern = Pattern.compile(patternStr);
// Replace all occurrences of pattern in input string
Matcher matcher = pattern.matcher(tempStr);
tempStr = matcher.replaceAll(value);
}
原因:java.util.ConcurrentModificationException位于
java.util.Hashtable$Enumerator.next(未知源代码)位于
com.pb.common.util.ResourceUtil.ReplaceWithSystemPropertyValue(ResourceUtil.java:350)
在
com.pb.common.calculator.ControlFileReader.searchAndReplaceWithEnv(ControlFileReader.java:610)
在
com.pb.common.calculator.ControlFileReader.readMatrixDataEntries(ControlFileReader.java:493)
在
com.pb.common.calculator.ControlFileReader。(ControlFileReader.java:109)
在
misc.UtilityExpressionCalculator.(UtilityExpressionCalculator.java:191)
在
misc.AbstractChoiceHandler.createUtilityExpressionCalculator(AbstractChoiceHandler.java:84)
在logSumCalculator.ModeChoiceModel.(ModeChoiceModel.java:41)
运行(ModeChoiceTask.java:59)
键的迭代方式有问题吗?在对集合进行迭代或枚举时,不能修改键/内容
为要修改的元素创建临时保持架,然后使用它进行更改。在集合上迭代或枚举时,不能修改键/内容 为要修改的元素创建临时保持架,然后使用它进行更改。请参阅以下的javadoc: 如果在创建迭代器后的任何时候,以迭代器自己的remove方法以外的任何方式修改哈希表的结构,迭代器将抛出ConcurrentModificationException 似乎您正在另一个线程中调用
System.getProperties()
上的setProperty
。请参阅以下的javadoc:
如果在创建迭代器后的任何时候,以迭代器自己的remove方法以外的任何方式修改哈希表的结构,迭代器将抛出ConcurrentModificationException
似乎您正在另一个线程中调用
System.getProperties()
上的setProperty
。您需要在迭代时同步属性:
Properties props = System.getProperties();
synchronized(props) {
// do work here ...
}
您需要在迭代时同步属性:
Properties props = System.getProperties();
synchronized(props) {
// do work here ...
}
因为这里没有修改
属性
对象,所以问题出在其他地方。您是否在应用程序中设置了系统属性?是的,系统属性在应用程序中设置。然后向我们展示该代码,并解释您打算如何将其与此代码同步,因为这是错误的。因为您没有在此处修改属性
对象,所以问题出在其他地方。您是否在应用程序中设置了系统属性?是的,系统属性在应用程序中设置。然后向我们展示该代码,并解释您打算如何将其与此代码同步,因为这是错误的。