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);
}
}