网站建设调研报告的前言,东莞百域网站建设公司,word期刊排版模板,网站访问量什么意思一、CAS是什么#xff1f;
CAS是Java中Unsafe类里面的一个方法#xff0c;是Compare and Swap的缩写#xff0c;中文翻译成比较并交换#xff0c;主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性#xff0c;实现并发算法时常用到的一种技术。它包含三…一、CAS是什么
CAS是Java中Unsafe类里面的一个方法是Compare and Swap的缩写中文翻译成比较并交换主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性实现并发算法时常用到的一种技术。它包含三个操作数——内存位置、预期值及更新值。
CAS是JDK提供的非阻塞原子性操作它通过硬件保证了比较-更新的原子性。
执行CAS操作的时候将内存位置的值与预期原值比较
如果相匹配那么处理器会自动将该位置值更新为新值如果不匹配处理器不做任何操作多个线程同时执行CAS操作只有一个会成功。 1.1 CAS底层原理如果知道谈谈你对Unsafe的理解 1、 变量state用volatile修饰保证了多线程之间的内存可见性。
2、Unsafe的特点
不受jvm管理也就意味着无法被GC需要我们手动GC稍有不慎就会出现内存泄漏。Unsafe的不少方法中必须提供原始地址(内存地址)和被替换对象的地址偏移量要自己计算一旦出现问题就是JVM崩溃级别的异常会导致整个JVM实例崩溃表现为应用程序直接crash掉。直接操作内存也意味着其速度更快在高并发的条件之下能够很好地提高效率。
3、变量stateOffset表示该变量值在内存中的偏移地址因为Unsafe就是根据内存偏移地址获取数据的。
1.2 CAS缺点
循环时间长开销很大引出来ABA问题举例张三账户本来有1000块今天该发工资3000块了财务打款3000账户此时4000然而张三老婆知道张三今天该发工资了急用取出3000等张三查余额的时候发现是1000以为没发工资所以这就是ABA问题
二、自旋锁借鉴CAS思想
自旋锁是指当一个线程在获取锁的时候如果锁已经被其它线程获取那么该线程将循环等待然后不断的判断锁是否能够被成功获取直到获取到锁才会退出循环。
自旋锁的实现基础是CAS算法机制。CAS自旋锁属于乐观锁乐观地认为程序中的并发情况不那么严重所以让线程不断去尝试更新。