首先理解Cas是 一种并发的无锁机制
实现的流程是
每次都先把当前线程获得的A保存起来
线程就在运行嘛 所以要再比较一下现在的内存中最新的A(value)cas必须依赖volatile ActomicInteger中封装的value变量就是volatile的
和我当初保存起来的A(prev)是否相等 compareAndSet(prevA,updateB)是boolean的
如果相等就说明没有变 那就可以对A操作更新为B 如果变了说明已经被修改了 那就不能操作 就继续循环 cas使用while(true)
这样保证了线程的独占的感觉 只有复合锁的感觉 才进行操作
是一种变相用锁机制的情形
无锁状态和锁状态的对比
无所状态适合线程少 CPU多的 因为无所状态不会导致线程被阻塞 再cpu的时间片未到之前 线程都不会产生上下文切换 所以说线程少 CPU多喝适合CAS因为不会频繁的时间片到时 切换
线程多的时候就是和锁
什么叫乐观锁 什么叫悲观锁
不怕别人改共享变量 我很乐观
CAS两个特点
无锁----变量改了就不断重试
无阻塞----不会被阻塞