CAS算法个人理解

本文深入解析CAS算法原理,对比传统同步机制,探讨其在Java中的应用,如ConcurrentHashMap与atomic包的高效并发解决方案。

一、描述

在日常的开发中,经常会出现多个线程去同时操作一个变量的情况。在这种情况下,我们经常会将此变量加上synchronized修饰符,来保证同一时间内只能有一个线程去访问修改该变量,但这样其他的县城都必须挂起,效率非常低。所以出现了一种新的思想:也就是CAS算法。

CAS算法全名为Compare And Swap 算法,即比较-替换算法。

这种算法有三个变量,内存地址的值V,旧的预期值A,要更新的目标值B

1、拿到最新内存地址的值

2、尝试将内存地址的值修改为更新的目标值B

3、若修改后目标值与预期值相等,则结束

4、若修改与预期值不等,则返回第一步

 

这样的实现的效果就是无限循环,直到数据被正确修改。

这样的好处就是没有为数据加锁,当然坏处也就是如果循环次数过多,则会负载过高。

 

二、在JAVA中的部分实现

1、ConcurrentHashMap

ConcurrentHashMap是最新的并发HashMap

其原理就是使用了CAS与部门加锁的原理

所以其效率比HashTable这种老式的并发集合要快得多。

 

2、atomic包

例如AtomicInteger等

当我们在给一个全局变量A进行自增操作时

曾经或许是这样去做

synchronized int a = 0;

//其它线程
a++;

但使用了AtomicInteger进行CAS算法自增时,可以改为如下代码

AtomicInteger ai = new AtomicInteger(0);

//其它线程
ai.getAndIncrement();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值