浅析CAS操做与JAVA实现

CASjava

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操做更加低.测试

相关文章
相关标签/搜索