CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ ConcurrentModificationException
John Squirrels
سطح
San Francisco

جاوا ۾ ConcurrentModificationException

گروپ ۾ شايع ٿيل

جاوا ۾ ConcurrentModificationException ڇا آهي؟

"ConcurrentModificationException تڏهن ٿيندو آهي جڏهن هڪ وسيلو تبديل ڪيو ويندو آهي جڏهن ته ترميم جي استحقاق نه هوندي آهي."
ٻين لفظن ۾، جاوا ConcurrentModificationException (جيئن ته نالو ڏيکاري ٿو) سمورو مسئلو جي ڪري ٿئي ٿو. اهو فرض ڪيو ويو آهي ته توهان کي اڳتي وڌڻ کان اڳ موضوعن ۽ ملٽي ٿريڊنگ جي اڳواٽ ڄاڻ آهي . جاوا ۾ ڪجهه ڪلاس، جهڙوڪ ڪليڪشن ڪلاس، ٿريڊ کي هڪ عنصر کي تبديل ڪرڻ جي اجازت نه ڏيندا آهن جڏهن ته ٻيو ٿريڊ ان تي ٻيهر ٿي رهيو آهي. جيڪڏهن ترميمي آپريشن (شامل ڪريو، هٽايو وغيره) ڪيو ويو آهي، پروگرام اڇلائي ٿو 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);
			}
		}
	}
}

پيداوار

"main" سلسلي ۾ استثنا java.util.ConcurrentModificationException java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042) تي java.base/java.util.ArrayList$Itr.next. :996) at milestone.thirty.seven.ConcurrentModificationExceptionTestDriver1.main(ConcurrentModificationExceptionTestDriver1.java:22)

جاوا ۾ ConcurrentModificationException کان ڪيئن بچجي؟

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 سان معاملو ڪرڻ جو هڪ تڪڙو دوز هو . جڏهن به توهان کي بيٺو محسوس ٿئي ها ته آزاد محسوس ڪريو. هميشه وانگر، اڳتي وڌڻ جي ڪنجي مشق ۽ صبر آهي. ان وقت تائين، سکڻ جاري رکو ۽ وڌندا رهو.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION