CodeGym /ื‘ืœื•ื’ Java /Random-HE /ConcurrentModificationException ื‘-Java
John Squirrels
ืจึธืžึธื”
San Francisco

ConcurrentModificationException ื‘-Java

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”

ืžื” ื–ื” ConcurrentModificationException ื‘-Java?

"ื—ืจื™ื’ ื”- ConcurrentModification ืžืชืจื—ืฉ ื›ืืฉืจ ืžืฉืื‘ ืžืฉืชื ื” ืœืœื ื”ืจืฉืื•ืช ื”ืฉื™ื ื•ื™."
ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื”-Java ConcurrentModificationException (ื›ืคื™ ืฉื”ืฉื ืžืจืžื–) ืžืชืจื—ืฉืช ืขืงื‘ ื‘ืขื™ื™ืช ื‘ืžืงื‘ื™ืœ. ื”ื”ื ื—ื” ื”ื™ื ืฉื™ืฉ ืœืš ื™ื“ืข ืžื•ืงื“ื ื‘ืฉืจืฉื•ืจื™ื ื•ื‘ืจื™ื‘ื•ื™ ืฉืจืฉื•ืจื™ื ืœืคื ื™ ืฉืชืžืฉื™ืš. ืžื—ืœืงื•ืช ืžืกื•ื™ืžื•ืช ื‘-Java, ื›ืžื• ืžื—ืœืงื•ืช Collection, ืื™ื ืŸ ืžืืคืฉืจื•ืช ืœืฉืจืฉื•ืจ ืœืฉื ื•ืช ืืœืžื ื˜ ื‘ื–ืžืŸ ืฉืจืฉื•ืจ ืื—ืจ ื—ื•ื–ืจ ืขืœื™ื•. ืื ืžื‘ื•ืฆืขืช ืคืขื•ืœืช ื”ืฉื™ื ื•ื™ (ื”ื•ืกืคื”, ื”ืกืจื” ื•ื›ื•'), ื”ืชื•ื›ื ื™ืช ื–ื•ืจืงืช 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.util.ConcurrentModificationException ื‘-java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042) ื‘-java.base/java.util.ArrayList$Itr.next(ArrayList.java :996) ื‘-milstone.thirty.seven.ConcurrentModificationExceptionTestDriver1.main(ConcurrentModificationExceptionTestDriver1.java:22)

ื›ื™ืฆื“ ืœืžื ื•ืข ConcurrentModificationException ื‘-Java?

ื™ืฉื ืŸ ื“ืจื›ื™ื ืฉื•ื ื•ืช ืœืขืงื™ืคืช ื”ื‘ืขื™ื” ืขื‘ื•ืจ ConcurrentModificationException . ื”ื ื” ื”ืชื’ื™ื™ืกื• ื›ืžื”. ืืชื” ื™ื›ื•ืœ ืœื‘ื—ื•ืจ ื›ืœ ืื—ื“ ืœืคื™ ื”ืฆืจื›ื™ื ืฉืœืš.
  1. ื”ื™ืžื ืข ืžืฉื™ื ื•ื™ ื‘ื–ืžืŸ ืื™ื˜ืจืฆื™ื”.
  2. ื”ืฉืชืžืฉ ื‘ืœื•ืœืื•ืช ืžืกื•ืจืชื™ื•ืช ืขื‘ื•ืจ ืื™ื˜ืจืฆื™ื” ื•ืฉื™ื ื•ื™ ื‘ื• ื–ืžื ื™ืช.
  3. ืฆื•ืจ ืขื•ืชืง ืฉืœ ืขืจื›ื™ื ืฉื™ืฉ ืœืฉื ื•ืช ืชื•ืš ื›ื“ื™ ืฉื™ืžื•ืฉ ื‘ืื™ื˜ืจื˜ื•ืจื™ื. ืขื“ื›ืŸ ืืช ื”ืขืจื›ื™ื ืœืื—ืจ ืกื™ื•ื ื”ืื™ื˜ืจืฆื™ื”.

ื“ื•ื’ืžื

ื”ื ื” ื“ื•ื’ืžื” ืœืื•ืคืŸ ืฉื‘ื• ืชื•ื›ืœ ืœื”ื™ืžื ืข ืž- 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);
	}
}

ืชึฐืคื•ึผืงึธื”

ื™ืžื™ ืขืกืงื™ื ืจืืฉื•ื ื™ื™ื: [ืฉื ื™, ืฉืœื™ืฉื™, ืจื‘ื™ืขื™, ื—ืžื™ืฉื™, ืฉื™ืฉื™, ืฉื‘ืช, ืจืืฉื•ืŸ] ื™ืžื™ ืขืกืงื™ื ืื—ืจื•ื ื™ื: [ืฉื ื™, ืฉืœื™ืฉื™, ืจื‘ื™ืขื™, ื—ืžื™ืฉื™, ืฉื™ืฉื™]

ืกื™ื›ื•ื

ื–ื• ื”ื™ื™ืชื” ืžื ื” ืžื”ื™ืจื” ืฉืœ ื”ืชืžื•ื“ื“ื•ืช ืขื ConcurrentModificationException ื‘-Java. ืืชื” ืžื•ื–ืžืŸ ืœืงืคื•ืฅ ื‘ื›ืœ ืคืขื ืฉืืชื” ืžืจื’ื™ืฉ ืชืงื•ืข. ื›ืžื• ืชืžื™ื“, ื”ืžืคืชื— ืœื”ืชืงื“ื ื”ื•ื ืชืจื’ื•ืœ ื•ืกื‘ืœื ื•ืช. ืขื“ ืื–, ื”ืžืฉื™ื›ื• ืœืœืžื•ื“ ื•ืœื”ืžืฉื™ืš ืœื’ื“ื•ืœ.
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION