Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างแผนที่แฮชพร้อมกันและแฮชแมปที่ซิงโครไนซ์ใน Java


Concurrent Hashmap เป็นคลาสที่เปิดตัวใน jdk1.5 แม็พแฮชที่เกิดขึ้นพร้อมกันจะใช้การล็อกที่ระดับบัคเก็ตเท่านั้นที่เรียกว่าแฟรกเมนต์ ขณะเพิ่มหรืออัปเดตแผนที่ ดังนั้น แฮชแม็พที่ทำงานพร้อมกันทำให้สามารถอ่านและเขียนแผนที่พร้อมกันได้

ซิงโครไนซ์ hashmap(Collection.syncronizedHashMap()) เป็นวิธีการของเฟรมเวิร์กการรวบรวม วิธีนี้ใช้การล็อกกับคอลเลคชันทั้งหมด ดังนั้น หากเธรดหนึ่งกำลังเข้าถึงแผนที่ จะไม่มีเธรดอื่นใดที่สามารถเข้าถึงแผนที่เดียวกันได้

ซีเนียร์ เลขที่ คีย์ แฮชแมปพร้อมกัน แฮชแมปที่ซิงโครไนซ์
1
การนำไปใช้
เป็นคลาสที่ใช้แฮชแมปแบบพร้อมกันและอินเทอร์เฟซแบบซีเรียลไลซ์ได้
เป็นวิธีการในคลาส Collection
2
กลไกการล็อค
ล็อคส่วนนี้ไว้
ล็อกทั้งแผนที่
3
ประสิทธิภาพ
hashmap พร้อมกันช่วยให้อ่านและเขียนพร้อมกันได้ ดังนั้นประสิทธิภาพจึงค่อนข้างดีกว่าแผนที่ที่ซิงโครไนซ์
หลายเธรดไม่สามารถเข้าถึงแผนที่พร้อมกันได้ ดังนั้น ประสิทธิภาพจึงค่อนข้างน้อยกว่าแฮชแมปที่เกิดขึ้นพร้อมกัน
4
ปุ่ม Null
ไม่อนุญาตให้มีค่า null เป็นคีย์หรือค่า
อนุญาตให้ null เป็นคีย์
5
ข้อยกเว้นการแก้ไขพร้อมกัน
ไม่ส่งข้อยกเว้นการแก้ไขพร้อมกัน
ตัววนซ้ำที่ส่งคืนโดยแผนที่ที่ซิงโครไนซ์จะส่งข้อยกเว้นการแก้ไขพร้อมกัน

ตัวอย่าง SynchronizedMap

public class SynchronizedMapExample {
   public static void main(String[] args) {
      Map<Integer,String> laptopmap = new HashMap<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      // create a synchronized map
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Synchronized map is : "+syncmap);
   }
}

ตัวอย่าง ConcurrentHashMap

public class ConcurrentHashMapExample {
   public static void main(String[] args) {
      //ConcurrentHashMap
      Map<Integer,String> laptopmap = new ConcurrentHashMap<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      System.out.println("ConcurrentHashMap is: "+laptopmap);
   }
}