Java์์ ConcurrentModificationException์ด๋ ๋ฌด์์ ๋๊น?
์
์ด ์์ธ๊ฐ ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
//Test driver for ConcurrentModificationException
public class ConcurrentModificationExceptionTestDriver1 {
public static void main(String[] args) {
List<String> businessDays = new ArrayList<>();
businessDays.add("Monday");
businessDays.add("Tuesday");
businessDays.add("Wednesday");
businessDays.add("Thursday");
businessDays.add("Friday");
businessDays.add("Saturday");
businessDays.add("Sunday");
Iterator<String> iterator = businessDays.iterator();
while (iterator.hasNext()) {
String day = iterator.next();
if (day.equals("Sunday")) {
// removing a list item while iterating
// leading to java.util.ConcurrentModificationException
businessDays.remove(day);
}
}
}
}
์ฐ์ถ
java.base/java.util.ArrayList$Itr.next(ArrayList.java)์ java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)์์ ์ค๋ ๋ "main" java.util.ConcurrentModificationException์ ์์ธ :996) ๋ง์ผ์คํค.thirty.seven.ConcurrentModificationExceptionTestDriver1.main(ConcurrentModificationExceptionTestDriver1.java:22)
Java์์ ConcurrentModificationException์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
ConcurrentModificationException ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์ํฉ๋๋ค . ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง๊ฐ ์ ๋๋์์ต๋๋ค. ๊ทํ์ ํ์์ ๋ฐ๋ผ ๋๊ตฌ๋ ์ง ์ ํํ ์ ์์ต๋๋ค.- ๋ฐ๋ณตํ๋ ๋์ ์์ ์ ํผํ์ญ์์ค.
- ๋์ ๋ฐ๋ณต ๋ฐ ์์ ์ ์ํด ๊ธฐ์กด ๋ฃจํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ ๋์ ์์ ํ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ญ๋๋ค. ๋ฐ๋ณต์ด ๋๋๋ฉด ๊ฐ์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์
ConcurrentModificationException์ ๋ฐฉ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค .import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//Test driver for ConcurrentModificationException
public class ConcurrentModificationExceptionTestDriver2 {
public static void main(String[] args) {
List<String> businessDays = new ArrayList<>();
businessDays.add("Monday");
businessDays.add("Tuesday");
businessDays.add("Wednesday");
businessDays.add("Thursday");
businessDays.add("Friday");
businessDays.add("Saturday");
businessDays.add("Sunday");
System.out.println("Initial Business Days: " + businessDays);
// Method II - Using traditional for loop
for (int i = 0; i < businessDays.size(); i++) {
if (businessDays.get(i).equals("Sunday")) {
businessDays.remove(i);
}
}
Iterator<String> iterator = businessDays.iterator();
List<String> businessDaysToBeRemoved = new ArrayList<>();
// Method III - Creating a copy of elements
while (iterator.hasNext()) {
String day = iterator.next();
if (day.equals("Saturday")) {
// Add values to be removed in the list
businessDaysToBeRemoved.add(day);
}
}
businessDays.removeAll(businessDaysToBeRemoved);
System.out.println("Final Business Days: " + businessDays);
}
}
์ฐ์ถ
์ต์ด์์
์ผ : [์,ํ,์,๋ชฉ,๊ธ,ํ ,์ผ] ์ต์ข
์์
์ผ : [์,ํ,์,๋ชฉ,๊ธ]
GO TO FULL VERSION