美文网首页
集合16-Hashtable与Collections.synch

集合16-Hashtable与Collections.synch

作者: zhanglbjames | 来源:发表于2017-06-09 21:19 被阅读0次

    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)为数组+链表+红黑树。

    相关文章

      网友评论

          本文标题:集合16-Hashtable与Collections.synch

          本文链接:https://www.haomeiwen.com/subject/diwxqxtx.html