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