-1
나는 ConcurrentUpdateException
을 던지고있는 프로그램을 썼다. 나는이 동작을 이해할 수 없다. 어떤 예외를 통해서도 작업 할 수있는 스레드가 하나도없고 어떤 반복자도 가져 가지 않아야한다.정렬 후 ConcurrentUpdateException을 이해해야합니까?
정렬은 어떻게됩니까? 왜 이것이이 예외를 던지고 있습니까? 설명 해주십시오.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Double> list1 = new ArrayList<Double>(Arrays.asList(3., 2., 0., 1., 2.));
List<Double> subList = list1.subList(0, 3);
Collections.sort(list1);
System.out.println(subList.get(0));
}
}
스택 추적을 추가 할 수 있습니까? '3., 2., 0., 1., 2.'은 무엇입니까? –
나를 위해 로컬로 코드를 실행할 때 예외는 없습니다. 단지'0.0'을 출력합니다. – SomeJavaGuy
@Sergey가 지적했듯이, subList()는 원래 목록에 의해 지원되는 뷰를 반환합니다. 원본 목록의 구조적 변경으로 인해보기가 정의되지 않습니다. 예를 들어, 하위 목록에서 원래 목록의 요소 0 ~ 3을 원하고 원래 목록을 정렬하면 요소는 더 이상 원래 요소가 아닙니다. 요청). ConcurrentUpdateException은 멀티 스레딩 문제를 나타내는 것으로 보이므로 오해의 소지가 있습니다. 대신 상위 목록의 수정에 대한 명시적인 테스트가 긍정적 인 경우 예외가 발생합니다. –