Concurrenthashmap วางเธรดอย่างปลอดภัยหรือไม่

สารบัญ:

Concurrenthashmap วางเธรดอย่างปลอดภัยหรือไม่
Concurrenthashmap วางเธรดอย่างปลอดภัยหรือไม่
Anonim

ประเด็นสำคัญของ ConcurrentHashMap: คลาส ConcurrentHashMap คือ thread-safe เช่น หลายเธรดสามารถทำงานบนวัตถุเดียวได้โดยไม่มีความยุ่งยากใดๆ … ใน ConcurrentHashMap ออบเจ็กต์จะถูกแบ่งออกเป็นจำนวนเซ็กเมนต์ตามระดับการทำงานพร้อมกัน

ปลอดภัยต่อด้ายหรือไม่

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

ขนาดเธรด ConcurrentHashMap ปลอดภัยหรือไม่

Class ConcurrentHashMap ตารางแฮชที่รองรับการดึงข้อมูลพร้อมกันแบบเต็มและการทำงานพร้อมกันที่คาดไว้สูงสำหรับการอัปเดต … อย่างไรก็ตาม แม้ว่า การดำเนินการทั้งหมดเป็นแบบปลอดภัยต่อเธรด การดำเนินการดึงข้อมูลไม่ได้มีการล็อก และไม่มีการสนับสนุนสำหรับการล็อกทั้งตารางในลักษณะที่ป้องกันการเข้าถึงทั้งหมด

HashMap นั้นปลอดภัยสำหรับเธรดหรือไม่

HashMap ไม่มีการซิงโครไนซ์ ไม่ปลอดภัยสำหรับเธรด และไม่สามารถแชร์ระหว่างหลายเธรดโดยไม่มีรหัสการซิงโครไนซ์ที่เหมาะสมในขณะที่ Hashtable ถูกซิงโครไนซ์

เหตุใด ConcurrentHashMap จึงไม่ปลอดภัย

แพ็คเกจพร้อมกัน เช่น ConcurrentHashMap, CopyOnWriteArrayList ฯลฯ ไม่ปลอดภัย ในธรรมชาติ ในข้อมูลโค้ดด้านบน เราใช้ Fail-Safe Iterator ดังนั้น แม้ว่าจะมีการเพิ่มองค์ประกอบใหม่ลงในคอลเลคชันในช่วงวนซ้ำก็ไม่มีข้อยกเว้น