Java中并发哈希映射和同步哈希映射的区别
Concurrent Hashmap 是在 jdk1.5 中引入的一个类。Concurrent hash map 在添加或更新映射时仅在称为片段的桶级别应用锁。因此,并发哈希映射允许对映射进行并发读写操作。
Synchronized hashmap(Collection.syncronizedHashMap())是 Collection 框架的一种方法。此方法对整个集合应用锁。因此,如果一个线程正在访问映射,则任何其他线程都无法访问同一映射。
序号 | 键 | 并发哈希映射 | 同步哈希映射 |
---|---|---|---|
1 | 实现 | 它是一个实现并发哈希映射和可序列化接口的类。 | 它是 Collection 类中的一个方法。 |
2 | 锁定机制 | 锁定部分 | 锁定整个映射。 |
3 | 性能 | 并发哈希映射允许并发读写。因此,其性能相对优于同步映射。 | 多个线程无法并发访问映射。因此,其性能相对低于并发哈希映射。 |
4 | 空键 | 它不允许空作为键或值。 | 它允许空作为键。 |
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); } }
广告