ConcurrentModificationException เกิดขึ้นเมื่อ วัตถุถูกพยายามแก้ไขพร้อมกันเมื่อไม่อนุญาต ข้อยกเว้นนี้มักจะเกิดขึ้นเมื่อทำงานกับคลาส Java Collection ตัวอย่างเช่น - ไม่อนุญาตให้เธรดแก้ไขคอลเลกชันเมื่อมีเธรดอื่นวนซ้ำ
ฉันจะแก้ไขข้อยกเว้นการแก้ไขพร้อมกันได้อย่างไร
เรายังสามารถหลีกเลี่ยง Concurrent Modification Exception ในสภาพแวดล้อมแบบเธรดเดียวได้ เราสามารถใช้ วิธีการลบของ Iterator เพื่อลบวัตถุออกจากวัตถุคอลเลกชันพื้นฐาน แต่ในกรณีนี้ คุณสามารถลบได้เฉพาะวัตถุเดียวกันและไม่สามารถลบวัตถุอื่นออกจากรายการได้
คุณจะป้องกันข้อยกเว้นการแก้ไขพร้อมกันบนแผนที่ได้อย่างไร
use ConcurrentHashMap. ใช้ HashMap แบบง่ายๆ ต่อไป แต่สร้างแผนที่ใหม่ในการดัดแปลงแต่ละครั้งและสลับแผนที่เบื้องหลัง (ซิงโครไนซ์การทำงานของสวิตช์หรือใช้ AtomicReference)
ตัววนซ้ำวิธีใดทำให้เกิดข้อยกเว้นการแก้ไขพร้อมกัน
ถ้าเราเรียกใช้ลำดับของเมธอดบนอ็อบเจ็กต์ที่ละเมิดสัญญา ออบเจ็กต์จะส่ง ConcurrentModificationException ตัวอย่างเช่น ถ้าในขณะที่วนซ้ำบนคอลเลกชัน เราพยายามแก้ไขคอลเลกชันนั้นโดยตรง จากนั้น ตัววนซ้ำที่ล้มเหลว ที่กำหนด จะโยน ConcurrentModificationException
ข้อยกเว้นการแก้ไขพร้อมกันใน Java stack overflow คืออะไร
หากเธรดเดียวออกลำดับของการเรียกใช้เมธอดที่ละเมิดสัญญาของอ็อบเจ็กต์ object อาจ โยนข้อยกเว้นนี้ ตัวอย่างเช่น หากเธรดแก้ไขคอลเล็กชันโดยตรงในขณะที่กำลังวนซ้ำในคอลเล็กชันโดยใช้ตัววนซ้ำแบบเร็วที่ล้มเหลว ตัววนซ้ำจะส่งข้อยกเว้นนี้ออก