เราสามารถใช้ hashmap ในสภาพแวดล้อมแบบมัลติเธรดได้หรือไม่

เราสามารถใช้ hashmap ในสภาพแวดล้อมแบบมัลติเธรดได้หรือไม่
เราสามารถใช้ hashmap ในสภาพแวดล้อมแบบมัลติเธรดได้หรือไม่
Anonim

เกิดอะไรขึ้นกับ 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"