Мы создаем древовидную структуру, состоящую из AID из структур JADE Agent. Мы решили сделать это рекурсивно, чтобы код мог выполняться независимо от того, сколько агентов в настоящее время находится в системе, древовидная структура может быть динамически изменена, чтобы соответствовать количеству агентов, находящихся в настоящее время в системе. Я не уверен, что необходимо установить какой-то замок, чтобы убедиться, что объект Map
считывается и записывается без ущерба целостности структуры.ConcurrentModificationException при рекурсивном использовании Maps в Java
Вот код, вызывающий проблему.
// BuildHierarchy method used to create the hierarchy based on Monitor Agents in the system
private void BuildHierarchy(Map<AID, Double>freqList, ArrayList<AID> childless, DefaultMutableTreeNode node){
int i = 0;
//creates an iterator for the freqList
Iterator iter = freqList.entrySet().iterator();
while(iter.hasNext()&& i < 2){
Map.Entry pairs = (Map.Entry)iter.next();
//if (i<2){
setParentNode((AID)pairs.getKey(), node);
//}
freqList.remove(pairs.getKey());
i++;
}
BuildHierarchy(freqList, childless, node.getNextNode());
BuildHierarchy(freqList, childless, node.getNextNode().getNextSibling());
}
Спасибо за совет. Это решило проблему. – user2418729