浅析CAS操作与JAVA实现

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了浅析CAS操作与JAVA实现脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

CAS

Compare And Swap.比较并交换.java中的同步器就是基于CAS技实现的,为什么它能保证操作的同步性呢?因为是原子操作的一种,所以可以在多线程环境下来实现数据的交换操作不被打断.

CAS的缺陷
ABA问题:
第一个线程来读取变量A时被挂起;第二个线程过来操作A,将A赋值为B之后,并重新赋值为A;线程二完成操作;此时,对于线程一来说,所看到变量A的值是没有变化的,但是实际上变量A已经修改了两次.
上述情况还不是最坏情况.如果在一个队列中,有三个指针元素分别顺序的指向了三个内存地址.进行.当第一个线程操作第一个位置的指针元素时,线程被挂起.线程二过来进行了一大堆的pop和push操作,这时第一个位置的指针元素的数据.
CAS下ABA问题及优化方案

CAS的优点
它比锁快.
Disruptor论文中讲述了一个实验:
这个测试程序调用了一个函数,该函数会对一个64位的计数器循环自增5亿次。
机器环境:2.4G 6核
运算: 64位的计数器累加5亿次

Method    Time (ms) Single thread    300 Single thread wITh CAS    5,700 Single thread with lock    10,000 Single thread with volatile write    4,700 Two threads with CAS    30,000 Two threads with lock    224,000

所以,锁的性能相对于CAS操作更加低.

脚本宝典总结

以上是脚本宝典为你收集整理的浅析CAS操作与JAVA实现全部内容,希望文章能够帮你解决浅析CAS操作与JAVA实现所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。