java并发编程艺术
2018-06-18 02:02:11来源:未知 阅读 ()
- cas算法
- 概要
- 刚开始看这本书的时候很经常看到cas算法,个人觉得cas算法在并发编程中也是挺重要的的一部分,cas是比较并交换的意思(compare and swap),campareAndSwap(int expect,int update),函数中有两个值,expect是期望值,update是更新值,用expect值去和对象中的值(假设为current),当current值相等于expect时,修改current值为update,否则,不修改,刚开始了解cas算法的时候,因为没有了解过实际的应用场景,而且使用单线程的思维方式去考虑cas算法的使用场景,十分不理解这个算法有什么用,但是当你考虑多个线程对一个共享变量进行修改时,就能发现它的好处了,举个多线程中通用的例子,100个线程对一个共享变量(初始值为0)做++操作(每个线程做一次++操作),得出结果小于100。当你使用cas算法,每个线程首先获取这个共享变量设为expect,对变量做了加1操作为update,使用cas算法修改共享变量,假设其他线程没有修改过共享变量,此时expect和共享变量值相等,cas算法将共享变量修改为update值,否则不修改共享变量,在重复如上的操作直到修改成功。
- cas算法原理
- cas算法(campare and swap)
- cas算法有三个核心参数
- 主内存中存放的v值,所有的线程共享。
- 线程上次从主内存中读取的v值设为a存放在线程的帧栈,每个线程私有。
- 需要写入内存中并改写v值得b值,也是线程对a值修改后得到的值。
- 在修改v值前,先用v值和a值进行对比,相等(即没有其他的线程修改主内存中的v值),设置v值为b值,否则,不修改。
- cas算法例子
- cas算法可能出现的问题
- aba问题:https://blog.csdn.net/u012813201/article/details/72841801
- 如何避免aba问题,可以通过版本号来解决aba问题
- 概要
- volatile原理
- 将当前处理器缓存行的数据写回到系统内存中
- 这个写回内存的操作会使其他的cpu里的缓存了改内存地址的数据无效(缓存一致性协议)
- 一般而言,为了提高处理器速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存后在操作,但是操作完后不知道何时会写回到内存中。而使用volatile修饰的变量进行的写操作会强制的将修改写入到内存中,并且触发缓存一致性协议,每个处理器上的缓存对应的内存地址无效,强制处理器从内存中获取新的数据。
- 重排序
- 锁
- 公平锁与不公平锁
- 重入锁
- 读写锁
- 乐观锁与悲观锁
- 锁的状态,
- 无锁
- 偏向锁
- 轻量级锁
- 重量级锁
- 原子操作类
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:OkHTTPClient
下一篇:SpringBoot 发送邮件
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash