ใน Java เรารู้ว่า Collections เป็นหนึ่งในแนวคิดที่สำคัญที่สุดที่ทำให้ Java เป็นภาษาที่ทรงพลังในตัวเอง เป็นการสนับสนุนเฉพาะคอลเล็กชันใน Java ที่ทำให้สนับสนุนข้อมูลประเภทใดก็ได้ที่สะดวกและมีประสิทธิภาพควบคู่ไปกับการดำเนินการ CRUD ที่เป็นไปได้
แต่ในระยะเดียวกันเมื่อคอลเล็กชันสัมผัสกับมัลติเธรด ประสิทธิภาพของมันจะลดลงบ้างเนื่องจากบางคอลเลกชั่นขาดการรองรับสภาพแวดล้อมแบบมัลติเธรด เพื่อเอาชนะข้อจำกัดนี้ Java ขอแนะนำ Concurrent Collections ซึ่งไม่เพียงแต่เอาชนะข้อจำกัดของสภาพแวดล้อมแบบมัลติเธรดเท่านั้น แต่ยังปรับปรุง Java เพื่อดำเนินการกับข้อมูลเธรดหลายรายการ
ต่อไปนี้เป็นข้อแตกต่างที่สำคัญระหว่างคอลเล็กชันดั้งเดิมและคอลเล็กชันพร้อมกัน
Sr.No. | คีย์ | คอลเลกชันดั้งเดิม | คอลเล็กชันพร้อมกัน |
---|---|---|---|
1 | ความปลอดภัยของเธรด | คลาสคลาสสิกส่วนใหญ่ใน Java Collections เช่น Array List, Linked List, Hash Map เป็นต้น จะไม่ซิงโครไนซ์และไม่ปลอดภัยสำหรับเธรดในสภาพแวดล้อมแบบมัลติเธรด | ในทางกลับกัน Java แนะนำคลาสเดียวกันใน Concurrent Collections โดยใช้การซิงโครไนซ์ ซึ่งไม่เพียงทำให้คลาสเหล่านี้เป็น Synchronized แต่ยังเธรดปลอดภัยในธรรมชาติ |
2 | กลไกการล็อค | เรามีคลาสที่ซิงโครไนซ์ในคอลเล็กชันดั้งเดิมเช่นกัน เช่น Vector และ Stack แต่คลาสเหล่านี้ใช้การล็อกทั้งคอลเล็กชัน ซึ่งลดประสิทธิภาพและความเร็วในการดำเนินการ | ในทางกลับกัน คอลเลกชั่นพร้อมกันจะแนะนำแนวคิดของการล็อกบางส่วน ซึ่งจะล็อกเฉพาะบางส่วนของคอลเล็กชันในกรณีที่มีสภาพแวดล้อมแบบมัลติเธรดซึ่งช่วยปรับปรุงประสิทธิภาพและความเร็วของคอลเล็กชันในสภาพแวดล้อมดังกล่าว |
3 | ข้อยกเว้นรันไทม์ | ในกรณีของคอลเล็กชันดั้งเดิม หากเราพยายามแก้ไขคอลเล็กชันผ่านเธรดที่แยกกันระหว่างการวนซ้ำคอลเลกชั่น เราก็จะได้รับ Runtime Exception ConcurrentModificationException | ในทางกลับกัน บุคคลจะไม่ได้รับข้อยกเว้นดังกล่าว หากเกี่ยวข้องกับคอลเล็กชันที่เกิดขึ้นพร้อมกัน เช่น คอลเล็กชันพร้อมกันอนุญาตให้แก้ไขในคอลเล็กชันในระหว่างการทำซ้ำ |
4 | ค่ากำหนด | เนื่องจากเหตุผลที่กล่าวถึงในประเด็นข้างต้น คอลเล็กชันแบบเดิมไม่เป็นที่นิยมในสภาพแวดล้อมแบบมัลติเธรด | ในทางกลับกัน คอลเลกชั่นพร้อมกันนั้นต้องการใช้ในสภาพแวดล้อมแบบมัลติเธรดเป็นหลัก |
5 | บทนำในตลาด | คอลเล็กชันแบบดั้งเดิมคือประเภทของคอลเล็กชันดั้งเดิมใน Java และเปิดตัวก่อนคอลเล็กชันที่เกิดขึ้นพร้อมกัน | ในขณะที่แนะนำคอลเลกชันพร้อมกันใน JDK 1.5 นั่นคือแนะนำหลังจากคอลเลกชันดั้งเดิม |