เหตุใดจึงมีข้อยกเว้นการแก้ไขที่เกิดขึ้นพร้อมกันใน java

สารบัญ:

เหตุใดจึงมีข้อยกเว้นการแก้ไขที่เกิดขึ้นพร้อมกันใน java
เหตุใดจึงมีข้อยกเว้นการแก้ไขที่เกิดขึ้นพร้อมกันใน java
Anonim

ConcurrentModificationException เกิดขึ้นเมื่อ วัตถุถูกพยายามแก้ไขพร้อมกันเมื่อไม่อนุญาต ข้อยกเว้นนี้มักจะเกิดขึ้นเมื่อทำงานกับคลาส Java Collection ตัวอย่างเช่น - ไม่อนุญาตให้เธรดแก้ไขคอลเลกชันเมื่อมีเธรดอื่นวนซ้ำ

ฉันจะแก้ไขข้อยกเว้นการแก้ไขพร้อมกันได้อย่างไร

เรายังสามารถหลีกเลี่ยง Concurrent Modification Exception ในสภาพแวดล้อมแบบเธรดเดียวได้ เราสามารถใช้ วิธีการลบของ Iterator เพื่อลบวัตถุออกจากวัตถุคอลเลกชันพื้นฐาน แต่ในกรณีนี้ คุณสามารถลบได้เฉพาะวัตถุเดียวกันและไม่สามารถลบวัตถุอื่นออกจากรายการได้

คุณจะป้องกันข้อยกเว้นการแก้ไขพร้อมกันบนแผนที่ได้อย่างไร

use ConcurrentHashMap. ใช้ HashMap แบบง่ายๆ ต่อไป แต่สร้างแผนที่ใหม่ในการดัดแปลงแต่ละครั้งและสลับแผนที่เบื้องหลัง (ซิงโครไนซ์การทำงานของสวิตช์หรือใช้ AtomicReference)

ตัววนซ้ำวิธีใดทำให้เกิดข้อยกเว้นการแก้ไขพร้อมกัน

ถ้าเราเรียกใช้ลำดับของเมธอดบนอ็อบเจ็กต์ที่ละเมิดสัญญา ออบเจ็กต์จะส่ง ConcurrentModificationException ตัวอย่างเช่น ถ้าในขณะที่วนซ้ำบนคอลเลกชัน เราพยายามแก้ไขคอลเลกชันนั้นโดยตรง จากนั้น ตัววนซ้ำที่ล้มเหลว ที่กำหนด จะโยน ConcurrentModificationException

ข้อยกเว้นการแก้ไขพร้อมกันใน Java stack overflow คืออะไร

หากเธรดเดียวออกลำดับของการเรียกใช้เมธอดที่ละเมิดสัญญาของอ็อบเจ็กต์ object อาจ โยนข้อยกเว้นนี้ ตัวอย่างเช่น หากเธรดแก้ไขคอลเล็กชันโดยตรงในขณะที่กำลังวนซ้ำในคอลเล็กชันโดยใช้ตัววนซ้ำแบบเร็วที่ล้มเหลว ตัววนซ้ำจะส่งข้อยกเว้นนี้ออก

แนะนำ: