HashMap、Hashtable与ConcurrentHashMap

来源:互联网 发布:卡通壁纸制作软件 编辑:程序博客网 时间:2024/05/21 17:55


区别HashMap
Hashtable
ConcurrentHashMap安全性
非线程安全
线程安全
线程安全
性能
异步处理,性能高
同步处理,性能校低
适合高并发
null操作key和value允许存放null都不允许null都不允许null

ConcurrentHashMap=HashMap的高性能+Hashtable的线程安全


多线程环境下,使用Hashmap进行put操作可能产生不同的结果,是非线程安全的,所以在多线程情况下不能使用HashMap。

HashTable,但是HashTable使用synchronized(他的get和put方法的实现代码如下)来保证线程安全,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占。在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,访问其他同步方法的线程就可能会进入阻塞或者轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低,不适合高并发。

ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了分段技术。它使用了多个锁来控制对hash表的不同部分进行的修改。put、remove操作会加锁,get读取操作不加锁。适合高并发场景。


HashMap JDK1.2 单线程情况下一般使用;

Hashtable JDK1.0 历史集合类,实现了map接口,已经逐渐被弃用;

ConcurrentHashMap JDK1.5 实际开发中多使用,多线程高并发场景;


原创粉丝点击