并发-CAS原则
来源:互联网 发布:linux 安装 wine 编辑:程序博客网 时间:2024/06/05 04:07
转载:http://www.cnblogs.com/xrq730/p/4976007.html
http://www.cnblogs.com/bigdatafly/p/5002604.html
1.java内存模型图:
每个线程单独有一份来自内存的变量拷贝,彼此之间的操作是不可见的。一般情况下,都是在缓存中读取它们所用到的数据,不会跨越而直接从内存读取,因此,就产生在多线程情况下要注意并发控制。
2.CAS
CAS(compare and swap),中文为:比较并交换,是并发控制操作的基础。CAS有三个值:内存值、原始值、修改值,如果原始值不等于内存值,返回false;如果等于则修改,返回true,并将内存值修改为修改值。
CAS是乐观锁用到的主要机制,乐观锁是不用加锁去执行操作,如果产生冲突则失败重试,直到成功为止,也叫做“自旋”。与乐观锁相对应的是悲观锁,synchronized就是悲观锁,也叫“独占锁”需要加锁进行操作,并且加锁代码块中的只能有一个线程进行操作。
接下来我们来看看java.util.concurrent下AtomicInteger源码
// setup to use Unsafe.compareAndSwapInt for updates private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset; public final boolean compareAndSet(int expect, int update) { return unsafe.compareAndSwapInt(this, valueOffset, expect, update); } /** * Atomically increments by one the current value. * @return the updated value */ public final int incrementAndGet() { return unsafe.getAndAddInt(this, valueOffset, 1) + 1; }
Unsafe类提供了硬件级别的原子操作,该类里面大部分都是native方法,从而使java间接访问到操作系统底层
CAS缺点:经典问题“ABA”问题,就是说,如果一个变量值为A,然后被修改成B,在修改成A,CAS会认为该变量没有被修改过,但是不会影响并发程序的正确性。
0 0
- 并发-CAS原则
- memcached并发CAS模式
- memcached并发CAS模式
- java并发之CAS
- Java 并发编程 CAS
- java并发中的CAS
- Java 并发编程之 CAS
- Memcached 并发控制 CAS 协议
- JAVA并发编程之CAS
- java并发之CAS操作
- java并发 之 CAS详解
- Java并发编程之CAS
- Java并发编程之CAS
- Java并发编程之CAS
- Java并发编程AtomicInteger&CAS
- Java并发编程之CAS
- 并发编程--CAS自旋锁
- 并发编程中的CAS算法
- 【Java并发编程实战】-----“J.U.C”:Exchanger
- db2常用命令大全
- 《Java知识点列表》V1.0
- org.json.JSONException: No value for userPicURL
- UICollectionView详解+实例
- 并发-CAS原则
- HashMap 实现原理
- jquery版本之间的冲突
- 编译不通过 illegal character: 65279
- Centos下给php安装Redis扩展及编译问题解决
- Jackson使用PropertyNamingStrategy处理属性首字母为大写的情况
- 深入理解Linux修改hostname
- js封装下拉框,实现重复利用
- 递归算法简单题