0
ITSPoI allowedPoi = j.next()
allowedPoIs.remove(k)
는 실행 후 다음 에러를 제공하는 라인 :java.util.ConcurrentModificationException리스트의 요소를 제거한 후
java.util.ConcurrentModificationException 의 java.util.ArrayList $ Itr.checkForComodification에서 (알 당신이 루프에서 실행할 때 소스)
private Map<String,Integer> findClosest(Route tempRoute, List<ITSPoI> allowedPoIs, List<ITSPoI> tabulist) {
double cost,mincost = 999999999;
Map<String,Integer> closest = new HashMap<String,Integer>();
for (int i=0; i<tempRoute.getPOIs().size(); i++) {
int k = 0;
for(Iterator<ITSPoI> j = allowedPoIs.iterator(); j.hasNext();) {
ITSPoI allowedPoi = j.next();
if (!intabu(allowedPoi,tabulist))
{
try
{
cost = _cvrtw.getCostMatrix().getCost(tempRoute.getPOI(i).getNodeId(),allowedPoi.getNodeId());
if (cost<mincost){
mincost = cost;
closest.put("index",i);
closest.put("poi",k);
allowedPoIs.remove(k);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
k++;
}
}
return closest;
}
그것은 일반적으로 허용되지 않습니다 : 그것은 명확하게 대신
allowedPoIs.remove(k);
내가
while
이 방법을 작성합니다: 같은
iterator
에서 제거 다른 스레드가이 스레드를 반복합니다. – Ashok@Ashok - 또는 동일한 스레드 *가 반복되는 동안 (이는 더 일반적인 문제이며 여기에서 문제입니다). –
예 동의어 :)'Array'를'Vector' 또는'List myList = Collections.synchronizedList (myList);로 대체 할만큼 충분히 – Ashok