集合16-Hashtable与Collections.synch

2017-06-09  本文已影响0人  zhanglbjames

Hashtable继承自Dictionary(遗留类,已经不建议在新版本中使用),实现原理和HashMap(1.8之前)一样,但Hashtable是线程安全的。Collections类中提供了一个锁的粒度更小的线程安全内部静态类synchronizedMap

Hashtable定义

Hashtable方法列表


由上方法列表可看出Hashtable实现线程安全是通过synchronized同步方法实现

synchronizedMap定义与方法

  1. synchronizedMap实现了Map接口
  2. 构造synchronizedMap时将this指针传递给监视器对象mutex,即同步方法块锁住的是synchronizedMap对象自身,并将方法代理在Map集合m的方法上
  3. synchronizedMap是Collections的私有静态内部类,可以通过Collecitons.synchronizedMap(Map)方法获取一个synchronizedMap向上转型为Map对象,对外发布。
  4. synchronizedMap将一个非线程安全的Map集合通过同步方法块锁住对象自身包装为线程安全的Map集合

Hashtable和HashMap

以下就对比一下Hashtable和HashMap(1.8之前)以及HashMap(1.8)的异同点

主要相同点:
  1. 都不支持有序操作
  2. 处理hash冲突都是用的是拉链法
主要不同点:
  1. 继承结构不同,Hashtable继承自Dictionary,而HashMap继承自AbstractMap。而Dictionary已经被遗弃了。
  2. Hashtable是线程安全的,方法都为同步方法synchronized,HashMap不是线程安全的。
  3. HashMap允许key和value都为null,Hashtable不允许key和value为null,会抛出异常。
  4. Hashtable与HashMap(1.8之前)底层数据结构为数组+链表;HashMap(1.8)为数组+链表+红黑树。
上一篇下一篇

猜你喜欢

热点阅读