Я получил ConcurrentModificationException в «String name = (String) keys.next();» когда я запускал Java-код в многопоточном режиме. Часть функции, что вызвало ошибку следующим образом:java.util.ConcurrentModificationException для многопоточного кода Java
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 выглядит следующим образом:
Вызванный: java.util.ConcurrentModificationException на java.util.Hashtable $ Enumerator. следующий (Unknown Source) на com.pb.common.util.ResourceUtil.replaceWithSystemPropertyValues (ResourceUtil.java:350) на com.pb.common.calculator.ControlFileReader.searchAndReplaceWithEnv (ControlFileReader.java:610) в ком .pb.common.c alculator.ControlFileReader.readMatrixDataEntries (ControlFileReader.java:493) на com.pb.common.calculator.ControlFileReader. (ControlFileReader.java:109) на misc.UtilityExpressionCalculator. (UtilityExpressionCalculator.java:191) в разное .AbstractChoiceHandler.createUtilityExpressionCalculator (AbstractChoiceHandler.java:84) на logSumCalculator.ModeChoiceModel. (ModeChoiceModel.java:41) в logSumCalculator.ModeChoiceTask.run (ModeChoiceTask.java:59)
есть проблема с тем, как ключи повторяются?
Потому что вы не изменяя 'Properties' объект здесь, проблема лежит где-то в другом месте. Вы устанавливаете свойства системы в своем приложении? – erickson
Да, системные свойства заданы в приложении. – Gaurav
Затем покажите нам этот код и объясните, как вы намеревались его синхронизировать с этим кодом, потому что это то, что сломано. – erickson