자바가 나타나다.util.ConcurrentModificationException 문제 및 해결 방법

1574 단어 javautil 오류
java.util.ConcurrentModificationException 솔루션
선언:
iterator를 사용하고 있습니다.hasNext () 가 교체기를 조작할 때, 이 때 교체된 대상이 바뀌면, 예를 들어 새 데이터를 삽입하거나 삭제됩니다.
를 사용하여 다음 예외를 보고합니다.

Java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
    at java.util.HashMap$KeyIterator.next(HashMap.java:828)
예를 들어 다음 프로그램(인터넷에서 시작):

mport java.util.*; 
 
public class Main 
{ 
public static void main(String args[]) 
{ 
Main main = new Main(); 
main.test(); 
} 
 
public void test() 
{ 
Map bb = new HashMap(); 
bb.put("1", "wj"); 
bb.put("2", "ry"); 
Iterator it = bb.keySet().iterator(); 
while(it.hasNext()) { 
Object ele = it.next(); 
      bb.remove(ele);  //wrong 
} 
System.out.println("Success!"); 
} 
} 
원인: Iterator가 두루 훑어볼 때 HashMap이 수정(bb.remove(ele),size-1)되고, Iterator(Object ele=it.next()되면 HashMap의 크기를 검사하고,size가 변하여 오류가 발생합니다.
해결 방법:
1) Iterator를 통해 Hashtable 수정

while(it.hasNext()) {
Object ele = it.next();
      it.remove();
}
2) 실제 프로그램에 따라 Iterator가 돌아다니는 프로그램에 수동으로 자물쇠를 채우고, HashMap을 수정하는 프로그램에 자물쇠를 넣는다.
3) "ConcurrentHashMap"을 사용하여 HashMap을 교체하면 ConcurrentHashMap이 직접 수정 작업을 검사하고 잠그거나 삽입 작업에 사용할 수 있습니다.

import java.util.concurrent.*;
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기