ConcurrentHashMap使用Node+CAS+synchronized实现线程安全

官网对ConcurrentHashMap的使用场景的介绍

//{Hashtable} is synchronized.  If a
//thread-safe implementation is not needed, it is recommended to use
//{HashMap} in place of {@code Hashtable}.  If a thread-safe
//highly-concurrent implementation is desired, then it is recommended
//to use {@link java.util.concurrent.ConcurrentHashMap} in place of
//{@code Hashtable}.
//不考虑并发的情况,使用HashMap()
//考虑低并发的情况,使用Hashtable()
//高并发的情况使用ConcurrentHashMap
为什么HashTable是线程安全的

HashTable能够保证线程安全的原因是,put、get、remove以及size、isEmpty等方法全部都用了Synchronized加同步锁,保证每一次只有一个线程能够对其进行改动。保证了线程安全,但是效率很低。

JDK1.7和JDK1.8的不同实现

JDK1.7里面,ConcurrentHashMap是用Segment和HashEntry实现的,每个Segment都是继承于Reentrantlock的,在对该segment进行操作时,获取锁,结束操作释放锁。
JDK1.8里面,没有用segment,而是用Node+CAS+synchronized实现的。

Node+CAS+synchronized实现
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
    implements ConcurrentMap<K,V>
//重点在于Concurrent接口中,putIfAbsent,remove,replace方法的实现
//与并发有关的默认值
private static final int DEFAULT_CONCURRENCY_LEVEL = 16;
static final int NCPU = Runtime.getRuntime().availablePr
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ConcurrentHashMap使用CAS(Compare and Swap)和Synchronized结合的机制来实现线程安全。在JDK 1.5版本以前,ConcurrentHashMap使用Synchronized关键字来实现锁机制,但这种方式锁的粒度较大,并发性能较低。而在JDK 1.5版本以后,ConcurrentHashMap引入了基于分段锁(Segment)的机制,通过将整个数据结构分成多个Segment,每个Segment都有自己的锁,这样不同的线程可以同时访问不同的Segment,从而提高了并发性能。同时,ConcurrentHashMap使用CAS操作和volatile变量来保证数据的一致性和可见性,以及红黑树等数据结构来提高查找和插入的效率。所以可以说,ConcurrentHashMap使用CASSynchronized结合的方式来实现线程安全和高并发性能。\[3\] #### 引用[.reference_title] - *1* *3* [什么是ConcurrentHashMapCAS+Volatile/Synchronizaed】?](https://blog.csdn.net/m0_64210833/article/details/126294540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ConcurrentHashMap使用Node+CAS+synchronized实现线程安全](https://blog.csdn.net/weixin_44893585/article/details/104580146)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值