>  기사  >  Java  >  Java 목록을 반복하고 수정할 때 동시 수정 예외를 방지하려면 어떻게 해야 합니까?

Java 목록을 반복하고 수정할 때 동시 수정 예외를 방지하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-21 09:43:10375검색

How Can I Avoid Concurrent Modification Exceptions When Iterating and Modifying Java Lists?

Java의 동시 수정 예외

"동시 수정" 예외는 여러 스레드가 다음과 같은 공유 데이터 구조를 수정하려고 시도할 때 발생합니다. 목록을 동시에 작성합니다. 이로 인해 예상치 못한 결과가 발생하고 데이터가 손상될 수 있습니다.

다음 Java 코드를 고려해 보세요.

import java.util.*;

public class SomeClass {
    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}

이 코드는 목록을 수정하는 동시에 목록을 반복하려고 시도합니다. 실행되면 "동시 수정 예외"가 발생합니다. 이는 목록이 변경되기 전에 목록 반복자가 생성되었기 때문입니다.

이 예외를 방지하려면 한 번에 하나의 스레드만 목록을 수정할 수 있도록 해야 합니다. 목록을 모두 수정한 후에만 반복자를 생성하여 이를 수행할 수 있습니다. 올바른 코드는 다음과 같습니다.

import java.util.*;

public class SomeClass {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for(String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();    
        if(it.hasNext()) {  
            String item = it.next();   
        }  

        System.out.println(s);

    }
}

목록이 수정된 후 반복자를 생성하면 반복 중에 단일 스레드만 목록에 액세스할 수 있습니다. 이렇게 하면 "동시수정 예외"가 발생하는 것을 방지할 수 있습니다.

위 내용은 Java 목록을 반복하고 수정할 때 동시 수정 예외를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.