ConcurrentModificationException:

Feb 09 2023
วิธีการหลักคือการพยายามเพิ่มจำนวนเต็มในรายการ ภายในเมธอดหลัก เราจะเริ่มเธรดย่อย

วิธีการหลักคือการพยายามเพิ่มจำนวนเต็มในรายการ

ภายในเมธอดหลัก เราจะเริ่มเธรดย่อย เช่น

t.start()

ขณะนี้เรามี 2 เธรดที่อยู่ระหว่างดำเนินการ

ตอนนี้เธรดหลักพยายามวนซ้ำองค์ประกอบของรายการและภายในกระบวนการนี้เธรดลูกพยายามเพิ่มองค์ประกอบ 4 ในรายการ

ดังนั้นจึงให้ ConcurrentModificationException

จะหลีกเลี่ยง ConcurrentModificationException ได้อย่างไร

1. เราสามารถใช้คอลเลกชันพร้อมกัน เช่น concurrentHashmap และ CopyonWriteArrayList ซึ่งจะไม่ให้ ConcurrentCollectionException

2. แทนที่จะวนซ้ำในคลาสคอลเลกชัน เราสามารถวนซ้ำผ่าน Array ได้ แต่จะทำให้ประสิทธิภาพลดลงหากขนาดอาร์เรย์ใหญ่เกินไป

บันทึก:

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