2024 ผู้เขียน: Elizabeth Oswald | [email protected]. แก้ไขล่าสุด: 2024-01-13 00:13
ConcurrentModificationException เกิดขึ้นเมื่อ วัตถุถูกพยายามแก้ไขพร้อมกันเมื่อไม่อนุญาต ข้อยกเว้นนี้มักจะเกิดขึ้นเมื่อทำงานกับคลาส Java Collection ตัวอย่างเช่น - ไม่อนุญาตให้เธรดแก้ไขคอลเลกชันเมื่อมีเธรดอื่นวนซ้ำ
ฉันจะแก้ไขข้อยกเว้นการแก้ไขพร้อมกันได้อย่างไร
เรายังสามารถหลีกเลี่ยง Concurrent Modification Exception ในสภาพแวดล้อมแบบเธรดเดียวได้ เราสามารถใช้ วิธีการลบของ Iterator เพื่อลบวัตถุออกจากวัตถุคอลเลกชันพื้นฐาน แต่ในกรณีนี้ คุณสามารถลบได้เฉพาะวัตถุเดียวกันและไม่สามารถลบวัตถุอื่นออกจากรายการได้
คุณจะป้องกันข้อยกเว้นการแก้ไขพร้อมกันบนแผนที่ได้อย่างไร
use ConcurrentHashMap. ใช้ HashMap แบบง่ายๆ ต่อไป แต่สร้างแผนที่ใหม่ในการดัดแปลงแต่ละครั้งและสลับแผนที่เบื้องหลัง (ซิงโครไนซ์การทำงานของสวิตช์หรือใช้ AtomicReference)
ตัววนซ้ำวิธีใดทำให้เกิดข้อยกเว้นการแก้ไขพร้อมกัน
ถ้าเราเรียกใช้ลำดับของเมธอดบนอ็อบเจ็กต์ที่ละเมิดสัญญา ออบเจ็กต์จะส่ง ConcurrentModificationException ตัวอย่างเช่น ถ้าในขณะที่วนซ้ำบนคอลเลกชัน เราพยายามแก้ไขคอลเลกชันนั้นโดยตรง จากนั้น ตัววนซ้ำที่ล้มเหลว ที่กำหนด จะโยน ConcurrentModificationException
ข้อยกเว้นการแก้ไขพร้อมกันใน Java stack overflow คืออะไร
หากเธรดเดียวออกลำดับของการเรียกใช้เมธอดที่ละเมิดสัญญาของอ็อบเจ็กต์ object อาจ โยนข้อยกเว้นนี้ ตัวอย่างเช่น หากเธรดแก้ไขคอลเล็กชันโดยตรงในขณะที่กำลังวนซ้ำในคอลเล็กชันโดยใช้ตัววนซ้ำแบบเร็วที่ล้มเหลว ตัววนซ้ำจะส่งข้อยกเว้นนี้ออก
แนะนำ:
ทำไมต้อง java.lang.outofmemoryerror java heap space?
OutOfMemoryError เป็นข้อผิดพลาดรันไทม์ใน Java ซึ่งเกิดขึ้นเมื่อ Java Virtual Machine (JVM) ไม่สามารถจัดสรรวัตถุได้เนื่องจากพื้นที่ว่างไม่เพียงพอใน Java heap … ข้อผิดพลาดนี้อาจเกิดขึ้นได้เมื่อหน่วยความจำภายในไม่เพียงพอที่จะรองรับการโหลดคลาส Java ฉันจะแก้ไข Java Lang OutOfMemoryError Java heap space ได้อย่างไร วิธีง่ายๆ ในการแก้ OutOfMemoryError ในจาวาคือ เพิ่มขนาดฮีปสูงสุดโดยใช้ตัวเลือก JVM -Xmx512M ซึ่งจะแก้ปัญหา OutOfMemoryError ของคุณทันที ฉันจะแก้ไขพื้นที่ Java
ทำไมเราจึงใช้ subclassing ใน java?
คลาสใน Java สามารถประกาศเป็นคลาสย่อยของคลาสอื่นโดยใช้คีย์เวิร์ดขยาย คลาสย่อย รับค่าตัวแปรและเมธอดจากซูเปอร์คลาสของมัน และใช้งานได้ราวกับว่ามันถูกประกาศภายในคลาสย่อยเอง: … ในการใช้คำศัพท์ที่เหมาะสม Java อนุญาตให้ใช้การสืบทอดคลาสเดียว ทำไมจึงใช้การสืบทอดในภาษาจาวา โปรแกรมเมอร์ใช้การสืบทอดเพื่อวัตถุประสงค์ที่แตกต่างกันหลายประการ:
เราใช้ coroutines ใน java ได้ไหม
คำตอบสั้นๆ สำหรับคำถามนี้คือ ใช่ บทความนี้นำเสนอการใช้งาน Coroutines แบบ Java ล้วนๆ ซึ่งมีให้ใช้งานในรูปแบบโอเพ่นซอร์สบน GitHub ภายใต้ลิขสิทธิ์ Apache 2.0 มันใช้คุณสมบัติที่มีตั้งแต่ Java 8 เพื่อให้การประกาศและการดำเนินการของ coroutines ง่ายที่สุดเท่าที่จะทำได้ coroutines ใช้ใน Java ได้ไหม Coroutine เป็นรูปแบบการออกแบบการทำงานพร้อมกันที่คุณสามารถใช้กับ Android เพื่อลดความซับซ้อนของโค้ดที่รันแบบอะซิงโครนัส Coroutines ถูกเพิ่มใน Kotlin ในเวอร์ชัน 1.
จะป้องกัน subclassing ใน java ได้อย่างไร?
คุณสามารถป้องกันไม่ให้คลาสย่อยโดย โดยใช้คีย์เวิร์ดสุดท้ายในการประกาศของชั้นเรียน ในทำนองเดียวกัน คุณสามารถป้องกันไม่ให้คลาสย่อยแทนที่เมธอดโดยการประกาศเป็นเมธอดสุดท้าย คลาสนามธรรมสามารถเป็นคลาสย่อยได้เท่านั้น ไม่สามารถยกตัวอย่างได้ คุณจะหยุดการสืบทอดใน Java ได้อย่างไร เพื่อป้องกันการสืบทอด ใช้คำหลัก "
เวลาคอมไพล์ java?
เวลาคอมไพล์คือช่วงเวลาที่โค้ดโปรแกรม (เช่น C, Java, C, Python) ถูกแปลงเป็นรหัสเครื่อง (เช่น รหัสไบนารี) รันไทม์คือช่วงเวลาที่โปรแกรมกำลังทำงานและโดยทั่วไปจะเกิดขึ้นหลังจากเวลาคอมไพล์ เวลาคอมไพล์เทียบกับรันไทม์คืออะไร เวลาคอมไพล์และรันไทม์เป็นคำศัพท์การเขียนโปรแกรมสองคำที่ใช้ในการพัฒนาซอฟต์แวร์ เวลาคอมไพล์คือ เวลาที่ซอร์สโค้ดถูกแปลงเป็นโค้ดสั่งการ ในขณะที่รันไทม์คือเวลาที่โค้ดสั่งการเริ่มทำงาน เวลารวบรวมหมายความว่าอย่างไร เวลาคอมไพล์หมายถึง ระยะเวลาที่โค้ดโปรแกรม