HashMap、Hashtable与ConcurrentHashMap


区别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 实际开发中多使用,多线程高并发场景;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值