CodeGym /جاوا بلاگ /Random-UR /جاوا میں ConcurrentModificationException
John Squirrels
سطح
San Francisco

جاوا میں ConcurrentModificationException

گروپ میں شائع ہوا۔

جاوا میں ConcurrentModificationException کیا ہے؟

"ConcurrentModificationException اس وقت ہوتا ہے جب کسی وسیلہ میں ترمیم کی جاتی ہے جب کہ اس میں ترمیم کے مراعات نہیں ہوتے ہیں۔"
دوسرے الفاظ میں، Java 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);
			}
		}
	}
}

آؤٹ پٹ

java.base/java.util.ArrayList$Itr.next :996) 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