เกิดอะไรขึ้นกับ HashMap ในสภาพแวดล้อมแบบมัลติเธรด … เป็นปัญหาหากมีการเพิ่มหลายเธรดในอินสแตนซ์ HashMap เดียวกันโดยไม่มี กำลังซิงโครไนซ์ แม้ว่าจะมีเพียง 1 เธรดที่กำลังแก้ไข HashMap และเธรดอื่นๆ กำลังอ่านจากแผนที่เดียวกันนั้นโดยไม่มีการซิงโครไนซ์ คุณก็จะประสบปัญหา
คุณสามารถใช้ HashMap ในสภาพแวดล้อมแบบมัลติเธรดได้หรือไม่
คุณต้องแน่ใจว่า: การอัปเดต HashMap ทั้งหมดจะเสร็จสิ้นก่อนที่จะสร้างอินสแตนซ์ของเธรด และเธรดที่สร้างแผนที่จะแยกเธรดด้วย เธรดใช้เฉพาะ HashMap ในโหมดอ่านอย่างเดียว - รับหรือวนซ้ำโดยไม่ต้องลบ ไม่มีชุดข้อความที่อัปเดตแผนที่
ทำไมไม่ควรใช้ HashMap ในสภาพแวดล้อมแบบมัลติเธรด มันสามารถทำให้เกิดลูปอนันต์ได้เช่นกัน?
ความจุเริ่มต้นของ HashMap คือ 16 และตัวประกอบการโหลดคือ 0.75 ซึ่งหมายความว่า HashMap จะเพิ่มความจุเป็นสองเท่าเมื่อคู่คีย์-ค่าที่ 12 เข้ามาในแผนที่ (160.75=12) เมื่อ 2 เธรดพยายามเข้าถึง HashMap พร้อมกัน คุณอาจพบกับการวนซ้ำที่ไม่สิ้นสุด เธรดที่ 1 และเธรดที่ 2 พยายามวางคู่คีย์-ค่าที่ 12
HashMap ทำให้เธรดปลอดภัยหรือไม่
HashMap ไม่มีการซิงโครไนซ์ ไม่ปลอดภัยสำหรับเธรด และไม่สามารถแชร์ระหว่างหลายเธรดโดยไม่มีรหัสการซิงโครไนซ์ที่เหมาะสมในขณะที่ Hashtable ถูกซิงโครไนซ์
อะไรจะเหมาะที่สุดสำหรับมัลติเธรดสิ่งแวดล้อม?
คำตอบคือ "ConcurrentHashMap"