تجنب ConcurrentModificationException عند استخدام الأساليب المتزامنة
يحدث خطأ ConcurrentModificationException عادةً بسبب التعديلات التي تم إجراؤها على المجموعة التي يكررها المكرر داخل الحلقة جسم. على الرغم من وجود كلمة رئيسية متزامنة في إعلان الطريقة، لا يزال من الممكن مواجهة هذا الاستثناء.في مقتطف التعليمات البرمجية المقدم:public syncronized X getAnotherX(){ إذا(iterator.hasNext()){ X b = iterator.next(); اسم السلسلة = b.getInputFileName(); ... العودة ب؛ } آخر {عودة فارغة؛}public synchronized X getAnotherX(){ if(iterator.hasNext()){ X b = iterator.next(); String name = b.getInputFileName(); ... return b; } else{return null;} }من المحتمل أن يكون الخطأ قد حدث لأن سلسلة رسائل خارجية تقوم بتعديل المجموعة الأساسية بينما يقوم المكرر بالتكرار عليها. يمكن أن يتضمن هذا التعديل إضافة عناصر أو إزالتها.
الحل لهذه المشكلة هو التأكد من عدم تمكن أي مؤشر ترابط آخر من تعديل المجموعة أثناء التكرار. يمكن تحقيق ذلك عن طريق إنشاء نسخة من المجموعة قبل تكرارها. ومع ذلك، إذا لم يكن ذلك ممكنًا، فيجب الحصول على المكرِّر بطريقة آمنة للخيط. يمكن القيام بذلك عن طريق استخدام الأسلوب Collections.synchronizedList() أو عن طريق إنشاء غلاف مزامنة مخصص للمجموعة.من خلال اتخاذ هذه الخطوات، يمكنك التأكد من عدم مواجهة ConcurrentModificationException وتكرار المجموعة بأمان.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3