كونكورنتموديفيكاتيونكسيبتيون هو واحد من الأخطاء الأكثر شيوعا التي يمكن أن تحدث عند العمل مع مجموعات في جافا. يحدث هذا الخطأ عندما يعدل مؤشر ترابط مجموعة بينما يتكرر مؤشر ترابط آخر على نفس المجموعة.
المشكلة هي أنه عندما تتغير المجموعة أثناء التكرار ، لا يمكن للمكرر مواصلة عمله ويلقي كونكونتموديفيكاتيونكسيبتيون. يتم ذلك لضمان الأمان ومنع عدم تناسق البيانات.
لتجنب الخطأ كونكرينتموديفيكاتيونكسيبتيون ، يمكنك استخدام المزامنة أو استخدام مجموعة مناسبة التي تم تصميمها للعمل في بيئة متعددة مؤشرات ، على سبيل المثال ، فئات من جافا.أوتيل.حزمة المتزامنة. يمكنك أيضا استخدام كونكورنثاشماب أو كوبونوريترايليست ، والتي توفر بدائل آمنة موضوع للمجموعات القياسية.
مثال على استخدام مجموعات بديلة:
- النظام.خارج.برينتلن (دخول.احصل على مفتاح ()+": "+ دخول.جيتفالو());
- }
- في هذا المثال ، استخدمنا كونكورنثاشماب ، والتي يمكن أن تعمل بشكل فعال في بيئة مؤشرات الترابط. أضفنا عدة عناصر إلى المجموعة ثم تكررت من خلال ذلك دون خوف من خطأ كونكورنتموديفيكاتيونكسيبتيون. بالطبع ، تتطلب كل حالة نهجا فرديا ، ويعتمد اختيار مجموعة بديلة على المتطلبات المحددة للتطبيق.
- ما هو كونكونتموديفيكاتيونكسيبتيون في جافا?
- تعريف وخصائص الاستبعاد
- متى يحدث جافا كونكورنتموديفيكاتيونكسيبتيون?
- أسباب الاستثناء
- كيفية إصلاح كونكونتموديفيكاتيونكسيبتيون جافا?
توصيات لمنع الاستبعاد
مثال التعليمات البرمجية للتعامل مع كونكونتموديفيكاتيونكسيبتيون جافا
سؤال وجواب
ما هو كونكونتموديفيكاتيونكسيبتيون في جافا?
متى يحدث كونكرينتموديفيكاتيونكسيبتيون في جافا?
كيفية إصلاح كونكونتموديفيكاتيونكسيبتيون في جافا?
كيفية تجنب كونكونتموديفيكاتيونكسيبتيون عند استخدام تيارات في جافا?
ما هو كونكونتموديفيكاتيونكسيبتيون في جافا?
كونكورنتموديفيكاتيونكسيبتيون هو استثناء يمكن أن يحدث في جافا عندما تقوم مؤشرات ترابط متعددة بتعديل مجموعة في نفس الوقت دون استخدام المزامنة المناسبة.
عندما تتغير مجموعة ، مثل قائمة أو مجموعة ، أثناء التكرار ، قد يحدث كونكورتموديفيكاتيونكسيبتيون. يحدث هذا لأنه عند التكرار من خلال مجموعة ، يتذكر المكرر الداخلي المتغير التكراري ويتحقق مما إذا كانت المجموعة قد تغيرت أثناء التكرار. إذا تم تعديل المجموعة دون استخدام مكرر يتكرر ، نتائج كونكورنتموديفيكاتيونكسيبتيون.
مثال على التعليمات البرمجية التي يمكن أن تسبب كونكرينتموديفيكاتيونكسيبتيون هو ما يلي:
"'جافا
قائمة الأسماء = قائمة جديدة ();
الأسماء.إضافة ("أليس");
الأسماء.إضافة ("بوب");
الأسماء.إضافة ("تشارلي");
ل (اسم السلسلة : أسماء) {
إذا (الاسم.يساوي ("بوب")) {
الأسماء.إزالة (الاسم);
}
}
«`
في المثال أعلاه ، عندما يصل المكرر إلى عنصر " بوب " ، تتم إزالة هذا العنصر من القائمة. يحدث تغيير المجموعة هذا دون استخدام مكرر ، مما يؤدي إلى كونكرينتموديفيكاتيونكسيبتيون.
لتجنب كونكرينتموديفيكاتيونكسيبتيون ، بدلا من تغيير المجموعة أثناء التكرار ، استخدم مكرر. على سبيل المثال ، يمكن إصلاح الرمز على النحو التالي:
"'جافا
قائمة الأسماء = قائمة جديدة ();
الأسماء.إضافة ("أليس");
الأسماء.إضافة ("بوب");
الأسماء.إضافة ("تشارلي");
مكرر مكرر = أسماء.مكرر ();
بينما (مكرر.هاسنكست ()) {
اسم السلسلة = مكرر.التالي();
إذا (الاسم.يساوي ("بوب")) {
مكرر.إزالة();
}
- }
- «`
- يستخدم المثال المصحح أعلاه مكررا للتكرار من خلال القائمة وحذف عنصر" بوب". هذا يمنع كونكورنتموديفيكاتيونكسيبتيون من الحدوث لأنه يتم تعديل القائمة باستخدام المكرر الصحيح.
- تعريف وخصائص الاستبعاد
الاستثناء هو الحدث الذي يحدث أثناء تنفيذ البرنامج ويعطل المسار الطبيعي لتشغيله. في لغة برمجة جافا ، الاستثناءات هي كائنات فئة ترث من فئة الاستثناء أو رونتيميكسيبتيون.
يحدث كونكورنتموديفيكاتيونكسيبتيون في جافا عندما يحاول مؤشر ترابط واحد لتعديل مجموعة وموضوع آخر يؤدي في وقت واحد عملية التكرار على تلك المجموعة. أي أن هذا الاستثناء يحدث عندما تتغير المجموعة أثناء قيام المكرر "بالنظر" إلى هذه المجموعة.
الملامح الرئيسية للاستثناء كونكونتموديفيكاتيونكسيبتيون:
كونكورنتموديفيكاتيونكسيبتيون هو استثناء غير محدد (غير محدد) ، لذلك لا يتحقق المترجم من وجوده في التعليمات البرمجية.
يحدث كونكورنتموديفيكاتيونكسيبتيون فقط أثناء تنفيذ البرنامج ، وليس أثناء التجميع.
- Удаление элемента из коллекции во время итерации:
مكرر مكرر = قائمة . مكرر ();
بينما (مكرر.هاسنكست ()) {
- عدد صحيح = مكرر.التالي();
- مكرر.إزالة () ؛ / / حذف عنصر بأمان
}
قائمة قائمة = أريليست جديدة();قائمة.إضافة(1);
قائمة.إضافة(2);قائمة.إضافة (3);- ل (عدد صحيح : نسخة) {
- }
الآن أنت تعرف متى يحدث كونكرينتموديفيكاتيونكسيبتيون في جافا وكيفية تجنب ذلك باستخدام مكررات أو نسخ من المجموعات.
- أسباب الاستثناء
- يحدث كونكورنتموديفيكاتيونكسيبتيون عندما يتم إجراء تعديلات في وقت واحد على كائن لا يوفر لهذا النوع من العمليات. يشير هذا الاستثناء إلى المشكلات المحتملة والحالة غير المتسقة للكائن.
- أسباب استثناء كونكونتموديفيكاتيونكسيبتيون ممكنة في الحالات التالية:
- تغيير المجموعة أثناء التكرار. إذا تمت إضافة عناصر أو حذفها أو تعديلها أثناء التكرار من خلال المجموعة ، يحدث كونكرينتموديفيكاتيونكسيبتيون.
تغيير مجموعة في مؤشر ترابط واحد ، بينما يكرر مؤشر ترابط آخر عناصر المجموعة أو يصل إليها. قد يحدث كونكورنتموديفيكاتيونكسيبتيون عند تغيير والوصول إلى نفس المجموعة من مؤشرات ترابط مختلفة في نفس الوقت.
الاستخدام غير الصحيح للمكرر. إذا تم استخدام المكرر بشكل غير صحيح ، على سبيل المثال ، فإنها تحاول حذف عنصر باستخدام طريقة إزالة() قبل استدعاء التالي () ، يحدث كونكورنتموديفيكاتيونكسيبتيون.
لتجنب حدوث كونكورتموديفيكاتيونكسيبتيون ، يجب استخدام النهج التالية:
لتغيير المجموعة فقط بعد نهاية التكرار على ذلك.
استخدم المزامنة عند الوصول إلى مجموعة من تدفقات مختلفة.
استخدم مجموعات خاصة مصممة للوصول المتوازي ، على سبيل المثال ، فئات من حزمة جافا.أوتيل.متزامن.
استخدم المكرر بشكل صحيح باتباع وثائقه. لحذف عنصر ، استخدم طريقة إزالة() بعد استدعاء الطريقة التالية ().
كيفية إصلاح كونكونتموديفيكاتيونكسيبتيون جافا?
كونكورنتموديفيكاتيونكسيبتيون هو خطأ يحدث في جافا عند محاولة تعديل مجموعة أثناء التكرار أو عند محاولة الوصول إلى المجموعة من مؤشرات ترابط مختلفة في وقت واحد. يحدث هذا الخطأ عندما تتغير المجموعة ، ولكن لا يمكن للمكرر اكتشاف التغييرات داخل نفسه ويلقي استثناء.
فيما يلي بعض الطرق لإصلاح كونكونتموديفيكاتيونكسيبتيون:
استخدم التكرارات أو الحلقات لكل بناء جملة:
بدلا من الوصول مباشرة إلى عناصر المجموعة ، استخدم التكرارات أو لكل بناء جملة حلقات ، لأنها تتعامل تلقائيا مع التغييرات في المجموعة وتمنع كونكورنتموديفيكاتيونكسيبتيون. على سبيل المثال:
مكرر مكرر = مجموعة.مكرر ();
بينما (مكرر.هاسنكست ()) {
عنصر السلسلة = مكرر.التالي();
// افعل شيئا مع العنصر
}
ل (عنصر السلسلة : مجموعة) {
// افعل شيئا مع العنصر
}
استخدم مجموعة متزامنة:
إذا تم استخدام مجموعة بواسطة سلاسل رسائل متعددة في نفس الوقت ، فيمكنك استخدام مجموعة متزامنة مثل
مجموعات.مجموعة متزامنة (مجموعة)
أو
مجموعات.قائمة متزامنة (قائمة)
. تقوم هذه الطرق بإرجاع غلاف فوق المجموعة الأصلية ، مما يضمن مزامنة الوصول إلى عناصر المجموعة.
استخدام كوبونوريترايليست:
إذا قمت بتغيير المجموعة بشكل متكرر وتريد تجنب كونكورنتموديفيكاتيونكسيبتيون ، يمكنك استخدام الفئة
كوبونوريترايليست
من عند
جافا.أوتيل.حزمة متزامنة
. ينشئ هذا الفصل نسخة من المجموعة مع كل عملية تعديل ، مما يضمن أمان القراءة المفتوحة (الوصول للقراءة فقط).
يعتمد اختيار طريقة التصحيح في حالة معينة على سياق استخدام المجموعة واحتياجات التطبيق. من المهم أن تتذكر أن استخدام التكرارات أو المجموعات المتزامنة يمكن أن يقلل من الأداء ، لذلك يجدر التفكير بعناية في جميع الخيارات الممكنة واختيار الخيار الأنسب لمهمتك.
توصيات لمنع الاستبعاد
لمنع حدوث كونكرينتموديفيكاتيونكسيبتيون في جافا ، فمن المستحسن أن تتبع التوصيات التالية:
استخدام المزامنة: استخدم مجموعات آمنة للخيط أو قم بمزامنة الوصول إلى مجموعات غير آمنة للخيط لتجنب التعديل المتزامن للعناصر المتكررة.
استخدام التكرارات: لتغيير مجموعة أثناء التكرار ، استخدم التكرارات ، وليس لكل حلقة. توفر التكرارات الطرق التي تسمح لك بتعديل مجموعة دون رفع كونكرينتموديفيكاتيونكسيبتيون.