วิธีการติดตั้ง Hash Map พร้อมกันใน Java ให้ดีที่สุด



บทความนี้จะแนะนำให้คุณรู้จักกับแนวคิดที่เรียกว่า Concurrent Hash Map ใน Java และติดตามด้วยการสาธิตที่ใช้ได้จริง

บทความนี้จะแนะนำให้คุณรู้จักกับแนวคิดที่เรียกว่า Concurrent Hash Map In และติดตามด้วยการสาธิตที่ใช้ได้จริงคำแนะนำต่อไปนี้จะกล่าวถึงในบทความนี้

ไปต่อกับบทความนี้เกี่ยวกับ Concurrent Hash Map ใน Java





ConcurrentHashMap ทำงานภายในอย่างไร

ตั้งแต่ Java 5 เป็นต้นไป ConcurrentHashMap ถูกนำมาใช้เป็นทางเลือกสำหรับ HashTable นอกจากนี้เรายังสามารถรับแผนที่ที่ซิงโครไนซ์โดยใช้เมธอดคลาสยูทิลิตี้ที่เรียกว่า synchronizedMap () แต่มีข้อเสียเปรียบของวิธีนี้คือประสิทธิภาพที่แย่มากเนื่องจากมีเพียงเธรดเดียวเท่านั้นที่สามารถเข้าถึงได้ในครั้งเดียว ดังนั้น ConcurrentHashMap จึงจัดการกับปัญหาเหล่านี้



ไปต่อกับบทความนี้เกี่ยวกับ Concurrent Hash Map ใน Java

ทำไมแผนที่อื่น?

แม้ว่าเราจะมี HashMap อยู่แล้ว HashTable แต่สิ่งที่จำเป็นของ ConcurrentHashMap ก็เป็นเพราะมันให้ประสิทธิภาพที่ดีกว่าในเวลาเดียวกันจึงปลอดภัยต่อเธรด

ไปต่อกับบทความนี้เกี่ยวกับ Concurrent Hash Map ใน Java



มันแตกต่างกันอย่างไร?

นอกจากนี้ยังขึ้นอยู่กับการแฮช แต่ประสิทธิภาพจะดีขึ้นด้วยกลยุทธ์การล็อก ซึ่งแตกต่างจาก HashTable หรือ Synchronized HashMap จะไม่ใช้การล็อกเดียวกันในแต่ละวิธีโดยใช้การล็อกแยกกันสำหรับแต่ละวิธีโดยจะใช้การล็อกการเข้าใหม่เพื่อจุดประสงค์นี้ เช่นเดียวกับ HashMap ConcurrentHashMap มี 16 ที่เก็บข้อมูลเช่นเซ็กเมนต์เพื่อสร้าง ConcurrentHashMap ที่มีมากกว่า 16 ที่เก็บข้อมูลมีตัวสร้างที่แตกต่างกัน

goto c ++ ตัวอย่าง

ก่อนที่จะพูดคุยในรายละเอียดให้เราทบทวนแนวคิดบางประการด้านล่าง:

ConcurrentHashMap: แผนที่นี้อนุญาตให้เข้าถึงเธรดพร้อมกัน มีเพียงส่วนหนึ่งของแผนที่ที่เรียกว่าเซ็กเมนต์นั่นคือโครงสร้างข้อมูลพื้นฐานกำลังถูกล็อกขณะเพิ่มหรืออัปเดตแผนที่ อนุญาตให้เข้าถึงเธรดพร้อมกันเพื่ออ่านข้อมูลโดยไม่ต้องล็อก ได้รับการแนะนำเพื่อปรับปรุงประสิทธิภาพ

  • Concurrency-Level: เป็นตัวเลขซึ่งเป็นจำนวนโดยประมาณของการอัปเดตเธรดพร้อมกัน
  • Load-Factor: เป็นค่าที่ใช้ในการควบคุมปัจจัยการปรับขนาด
  • ความจุเริ่มต้น: เป็นคุณสมบัติที่สร้างแผนที่ด้วยขนาดที่ระบุ

ลองดูแผนภาพด้านล่างและพยายามทำความเข้าใจว่า ConcurrentHashMap ทำงานอย่างไร

รูปภาพ - Hashmap พร้อมกัน - Edureka

ดังนั้นในแผนภาพด้านบนเรามี 16 ล็อคซึ่งล็อคเฉพาะบางส่วนของแผนที่ที่จำเป็นเพื่อให้สามารถเข้าถึงวิธีการอื่นโดยเธรดที่แตกต่างกันซึ่งจะช่วยปรับปรุงประสิทธิภาพ

คล้ายกับ HashMap ConcurrentHashMap ทำงานในลักษณะเดียวกันโดยมี 16 เซ็กเมนต์ตามค่าเริ่มต้นและจัดเก็บองค์ประกอบโดยการแฮชดังนั้นหากองค์ประกอบมีแฮชเดียวกันจะถูกเก็บไว้ในส่วนเดียวกันดังที่แสดงในแผนภาพด้านบนด้วยความช่วยเหลือของรายการที่เชื่อมโยง

ไปต่อกับบทความนี้เกี่ยวกับ Concurrent Hash Map ใน Java

ความแตกต่างระหว่าง ConcurrentHashMap และ HashMap

HashMap เป็นของ Collections ในขณะที่ ConcurrentHashMap เป็นของ Concurrent Collections แต่ยังมีความแตกต่างอื่น ๆ อีกมากมาย

  • ConcurrentHashMap คือเธรดปลอดภัยเช่นซิงโครไนซ์ แต่ HashMap ไม่ซิงโครไนซ์
  • ConcurrentHashMap มีประสิทธิภาพต่ำเนื่องจากมีการซิงโครไนซ์เนื่องจากบางครั้งเธรดต้องรอ แต่ HashMap มีประสิทธิภาพสูงเนื่องจากไม่ซิงโครไนซ์และเธรดใด ๆ สามารถเข้าถึงได้พร้อมกัน
  • เราจะได้รับ ConcurrentModificationException หากสองเธรดพยายามแก้ไขหรือเพิ่มเนื้อหาของ Object พร้อมกัน อย่างไรก็ตามในกรณีของ ConcurrentHashMap เราจะไม่ได้รับข้อยกเว้นใด ๆ ในขณะที่ดำเนินการเดียวกัน

  • อนุญาตให้ใช้ค่า Null สำหรับคีย์และค่าใน HashMap อย่างไรก็ตาม ConcurrentHashMap ไม่อนุญาตให้ใช้ค่า null สำหรับคีย์และค่าที่พยายามเพิ่มค่า null เราจะได้รับข้อยกเว้นเช่น NullPointerException

  • HashMap เปิดตัวใน JDK 1.2 ในขณะที่ ConcurrentHashMap เปิดตัวใน JDK 1.5

ดังที่เราได้เห็นก่อนหน้านี้เพื่อประสิทธิภาพที่ดีขึ้นประกอบด้วยอาร์เรย์ของโหนดเป็นที่เก็บข้อมูลตารางซึ่งเป็นส่วนของตารางก่อนหน้านี้ จาวา 8 .

ที่เก็บข้อมูลจะเริ่มต้นอย่างเฉื่อยชาเมื่อทำการแทรกครั้งแรก ทุกที่เก็บข้อมูลสามารถล็อคได้อย่างอิสระโดยการล็อกโหนดแรกของที่เก็บข้อมูลและอ่านการดำเนินการไม่ปิดกั้น

เปรียบเทียบกับ HashMap พร้อมกัน ให้พิเศษ ระดับการทำงานพร้อมกัน อาร์กิวเมนต์เพื่อควบคุมจำนวนเธรดโดยประมาณที่จะใช้

ตัวสร้าง:

  1. ConcurrentHashMap m = ConcurrentHashMap ใหม่ ()

    แผนที่ว่างใหม่ถูกสร้างขึ้นโดยมีความจุเริ่มต้นเริ่มต้นที่ 16, โหลดแฟคเตอร์ 0.75 และระดับการทำงานพร้อมกัน 16

  2. ConcurrentHashMap m = ConcurrentHashMap ใหม่ (int initialCapacity)
    แผนที่ว่างใหม่ถูกสร้างขึ้นโดยมีความจุเริ่มต้นที่ระบุโหลดแฟคเตอร์ 0.75 และระดับการทำงานพร้อมกัน 16

  3. ConcurrentHashMap m = ConcurrentHashMap ใหม่ (int initialCapacity, float loadFactor)

    แผนที่ว่างใหม่ถูกสร้างขึ้นด้วยความจุเริ่มต้นที่ระบุและปัจจัยการโหลดที่มีระดับ 16 พร้อมกัน

  4. ConcurrentHashMap m = ConcurrentHashMap ใหม่ (int initialCapacity, float loadFactor, int concurrencyLevel)
    แผนที่ว่างใหม่ถูกสร้างขึ้นพร้อมกับความจุเริ่มต้นที่ระบุโหลดแฟคเตอร์และระดับการทำงานพร้อมกัน

  5. ConcurrentHashMap m = ConcurrentHashMap ใหม่ (แผนที่ m)
    สร้าง ConcurrentHashMap ใหม่จากแผนที่ที่ให้มา

อีกสองอาร์กิวเมนต์: initialCapacity และ loadFactor ทำงานค่อนข้างเหมือนกับ HashMap
ConcurrentMap เป็นหน่วยความจำที่สอดคล้องกับการดำเนินการคีย์ / ค่าในสภาพแวดล้อมแบบมัลติเธรด

ไปต่อกับบทความนี้เกี่ยวกับ Concurrent Hash Map ใน Java

หลุมพราง

ในขณะที่ดึงอ็อบเจ็กต์ ConcurrentHashMap จะไม่ถูกบล็อกและอาจทับซ้อนกับการดำเนินการอัพเดตดังนั้นเพื่อประสิทธิภาพที่ดีขึ้นพวกเขาจะดึงเฉพาะการดำเนินการอัพเดตที่เสร็จสมบูรณ์ล่าสุด

ผลลัพธ์ของเมธอดสถานะรวมรวมถึงขนาด isEmpty และ containValue มักจะมีประโยชน์เฉพาะเมื่อแผนที่ไม่ได้รับการอัพเดตพร้อมกันในเธรดอื่น

หากการอัปเดตพร้อมกันได้รับการควบคุมอย่างเหมาะสมวิธีการสถานะเหล่านี้สามารถเชื่อถือได้

แม้ว่าวิธีการเหล่านี้จะไม่รับประกันแบบเรียลไทม์

สร้าง java สตริงแบบสุ่ม

ความจุของตารางเริ่มต้นคือ 16 แต่เราสามารถเปลี่ยนได้โดยใช้ระดับการทำงานพร้อมกัน

ConcurrentHashMap สาธารณะ (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

หากจำเป็นต้องใช้คีย์คีย์เพื่อเรียงลำดับเราสามารถใช้ ConcurrentSkipListMap

หลังจากเรียกใช้โปรแกรมข้างต้นแล้วคุณจะเข้าใจ Concurrent Hash Map ใน Java ดังนั้นเราจึงมาถึงตอนท้ายของบทความนี้แล้วหากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูที่ไฟล์ บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบทความนี้และเราจะติดต่อกลับโดยเร็วที่สุด