java基础
cas自旋-基于内存值的判断

基于CAS操作的变量必须声明为Volatile类型,这样多线程操作,能保证线程1修改的值立马在线程2中可以观察的到。因此当线程二读取内存块的值作为预期值,然后进行其他操作,同一时刻,线程1将内存块的值改变,线程2设置值的时候,发现内存块的值与预期的值不一致,就认为操作失败,已有线程修改。
JDK1.8中的ConcurrentHashMap就是采用此CAS算法保证高并发的线程安全。
CAS的弊端之一就是,线程1在把内存块值改掉一次,然后又修改一次恢复原来的值,其实这个时候已经执行了很多操作了,但是线程2认为值没有变,为预防此结果因采用版本号来判断,没修过一次自增1。
网友评论