嗨是的,它會給作爲
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。
所以做這樣的事情,並遍歷列表與迭代器
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
}
的幫助,我們可以說是一個迭代器的快速失敗行爲不能得到保證,因爲它是,這裏的不同步併發修改在那兒。失敗快速迭代器盡最大努力拋出ConcurrentModificationException。因此,自從迭代開始以來,只要他們意識到Collection的結構已被修改,並且如果迭代器線程實現了修改,那麼快速失敗的迭代器就會失敗,然後它會拋出ConcurrentModificationException。更改可以是添加,更新或刪除。
在android中可能是在不同的實現下,所以沒有問題。
的比較研究然而請訪問:當你遍歷一個列表,我沒有有一個偉大的[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崩潰的事實是明顯的:使用迭代器從集合中刪除元素,同時迭代它。在DVM上實現Iterator可能會有所不同。這就是說,使用一個迭代器,它將在兩個工作。 –
請參閱:http://stackoverflow.com/questions/5051879/in-java-how-can-this-throw-a-concurrentmodificationexception-in-a-single-threade?rq=1 –
我瞭解它的不同行爲DVM,但不明白爲什麼如此!雖然快速失敗依賴於JVM,但我仍然認爲它是基本行爲 –