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 중국어 웹사이트의 기타 관련 기사를 참조하세요!