안녕 예는
실패 빠른 행동이 수정의 수를 유지함으로써 및 반복 스레드가 실현 경우 구현 등
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at coffee.CoffeeApp.main(CoffeeApp.java:20)
Java Result: 1
때문에 예외를 줄 것이다 변경 카운트가 변경되면 (자), ConcurrentModificationException가 Throw됩니다.
그래서 우리가 말할 수있는 것은 반복자의 fail-fast의 동작은 그것이 여기서, 비동기의 동시 변경이 그대로 보장 할 수 없다 이런 식으로 뭔가를하고 반복자
List<String> list = new ArrayList<String>();
list.add("Something");//add only 1 object
Iterator<String> it = list.iterator();
while(it.hasNext()) {
it.next();
it.remove();
//Do something with obj
}
의 도움으로 목록을 반복 거기에있다. Fail-fast iterator는 최선 노력 (best-effort) 기준으로 ConcurrentModificationException을 던집니다. 따라서 반복 속도가 시작된 이후 Collection의 구조가 수정되고 iterator 스레드가 수정을 실현하면 ConcurrentModificationException이 throw되는 즉시 fail-fast 반복자가 실패합니다. 변경 사항은 추가, 갱신 또는 삭제 일 수 있습니다.
안드로이드에서는 다른 구현에 따라 문제가 없을 수 있습니다. 당신이 목록을 통해 반복하는 동안 비교 연구를위한
그러나 방문은 내가 훌륭한 R을 여기 & D
http://www.docjar.com/html/api/java/util/ArrayList.java.html
V/s의
https://android.googlesource.com/platform/libcore/+/f33eae7e84eb6d3b0f4e86b59605bb3de73009f3/luni/src/main/java/java/util/ArrayList.java
사실 JVM에서 충돌이 있음을 분명히 알 수 있습니다. 반복기를 사용하여 반복에서 컬렉션에서 요소를 제거 할 수 있습니다. Iterator의 구현은 DVM에서 다를 수 있습니다. 즉, 반복기를 사용하면 두 가지 모두에서 작동합니다. –
참조 : http://stackoverflow.com/questions/5051879/in-java-how-can-this-throw-a-concurrentmodificationexception-in-a-single-threade?rq=1 –
DVM, 그러나 didnt는 왜 그렇게 이해한다! fail-fast는 JVM에 의존적이지만 여전히 기본 동작이 될 것으로 기대했습니다. –