并发Hashmap是jdk1.5中引入的类。并发哈希映射仅在添加或更新映射时在称为片段的存储桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。
同步hashmap(Collection.syncronizedHashMap())是Collection框架的一种方法。此方法将锁应用于整个集合。因此,如果一个线程正在访问该映射,则没有其他线程可以访问同一映射。
序号 | 键 | 并发哈希映射 | 同步哈希映射 |
---|---|---|---|
1 | 实作 | 它是一个实现并发哈希映射和可序列化接口的类。 | 它是Collection类中的一种方法。 |
2 | 锁机构 | 锁定部分 | 锁定整个映射。 |
3 | 性能 | 并发哈希映射允许并发读写。因此,性能要比同步映射好。 | 多个线程不能同时访问映射。因此,性能相对低于并发哈希映射。 |
4 | 空键 | 不允许将null用作键或值。 | 它允许null为键。 |
5 | 并发修改异常 | 它不会引发并发修改异常。 | 同步映射返回的迭代器引发并发修改异常 |
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"); //创建一个同步映射 Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap); System.out.println("Synchronized map is : "+syncmap); } }
public class ConcurrentHashMap---Example { 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); } }