ConcurrentHashMap JDK 1.5-এ ইন্ট্রোডিউসড একটি ক্লাস। এটি বাকেট লেভেলে (ফ্র্যাগমেন্ট) লক প্রয়োগ করে ম্যাপে অ্যাড বা আপডেট করার সময়। তাই কাঙ্কারেন্ট রিড এবং রাইট অপারেশন অনুমতি দেয়।
Synchronized HashMap (Collections.synchronizedMap()) কালেকশন ফ্রেমওয়ার্কের একটি মেথড। এটি পুরো কালেকশনে লক লাগায়। এক থ্রেড ম্যাপ এক্সেস করলে অন্য থ্রেড অ্যাক্সেস করতে পারে না।
ConcurrentHashMap এবং Synchronized HashMap-এর তুলনা
| ক্রমিক নং | বিষয় | ConcurrentHashMap | Synchronized HashMap |
|---|---|---|---|
| ১ | ইমপ্লিমেন্টেশন | একটি ক্লাস যা ConcurrentMap এবং Serializable ইমপ্লিমেন্ট করে | Collections ক্লাসের একটি মেথড |
| ২ | লক মেকানিজম | পোর্শন লক করে (সেগমেন্ট/বাকেট লেভেল) | পুরো ম্যাপ লক করে |
| ৩ | পারফরম্যান্স | কাঙ্কারেন্ট রিড/রাইট অনুমতি দেয়, পারফরম্যান্স ভালো | একসাথে একাধিক থ্রেড অ্যাক্সেস করতে পারে না, পারফরম্যান্স কম |
| ৪ | নাল কি | নাল কি বা ভ্যালু অনুমতি দেয় না | নাল কি অনুমতি দেয় |
| ৫ | ConcurrentModificationException | নিক্ষেপ করে না | সিনক্রোনাইজড ম্যাপের ইটেরেটর নিক্ষেপ করে |
SynchronizedMap উদাহরণ
public class SynchronizedMapExample {
public static void main(String[] args) {
Map<Integer, String> laptopmap = new HashMap<>();
laptopmap.put(1, "IBM");
laptopmap.put(2, "Dell");
laptopmap.put(3, "HCL");
// সিনক্রোনাইজড ম্যাপ তৈরি
Map<Integer, String> syncmap = Collections.synchronizedMap(laptopmap);
System.out.println("Synchronized map is: " + syncmap);
}
}
ConcurrentHashMap উদাহরণ
public class ConcurrentHashMapExample {
public static void main(String[] args) {
Map<Integer, String> laptopmap = new ConcurrentHashMap<>();
laptopmap.put(1, "IBM");
laptopmap.put(2, "Dell");
laptopmap.put(3, "HCL");
System.out.println("ConcurrentHashMap is: " + laptopmap);
}
}
মূল নোট
- ConcurrentHashMap: হাই কাঙ্কারেন্সি, নন-ব্লকিং রিড, আধুনিক অ্যাপ্লিকেশনের জন্য পছন্দনীয়
- Synchronized Map: লিগ্যাসি কোড, সিম্পল ইউজ কেস, কম কাঙ্কারেন্সি
- জাভা ৮+ এ ConcurrentHashMap-এ computeIfAbsent, merge, forEachなど উন্নত মেথড রয়েছে