Juc14_CAS的概述、Unsafe类的原理、CAS缺点、ABA问题如何解决(上)

简介: ①. CAS的概述?②. UnSafe类

①. CAS的概述?


①. CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的


(AtomicInteger类主要利用CAS(compare and swap)+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升)


image.png



②. CAS并发原语提现在Java语言中就是sun.misc包下的UnSaffe类中的各个方法.调用UnSafe类中的CAS方法,JVM会帮我实现 CAS汇编指令. 这是一种完全依赖于硬件 功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许中断,也即是说CAS是一条原子指令,不会造成所谓的数据不一致的问题


③. 关于unSafe.getAndIncrement()方法的分析


微信图片_20220108130537.png


④. 代码展示


  /*
  * CAS:Compare and swap [比较并交换]
  * */
  public class AtomicIntegerDemo {
      public static void main(String[] args) {
          AtomicInteger atomicInteger=new AtomicInteger(5);
          //true 2019
          System.out.println(atomicInteger.compareAndSet(5, 2019)+"\t"+atomicInteger.get());
          //false 2019
          System.out.println(atomicInteger.compareAndSet(5, 2222)+"\t"+atomicInteger.get());
      }
  }


②. UnSafe类


①. 是CAS的核心类,由于Java 方法无法直接访问底层 ,需要通过本地(native)方法来访问,UnSafe相当于一个后门,基于该类可以直接操作特定的内存数据.UnSafe类在于sun.misc包中,其内部方法操作可以向C的指针一样直接操作内存,因为Java中CAS操作依赖于UnSafe类的方法


注意:UnSafe类中所有的方法都是native修饰的,也就是说UnSafe类中的方法都是直接调用操作底层资源执行响应的任务


微信图片_20220108130616.png


②. 变量ValueOffset,便是该变量在内存中的偏移地址,因为UnSafe就是根据内存偏移地址获取数据的


微信图片_20220108130637.png


③. 变量value和volatile修饰,保证了多线程之间的可见性


微信图片_20220108130654.png

相关文章
|
28天前
|
算法 Java
介绍一下CAS算法的实现原理
【10月更文挑战第20天】介绍一下CAS算法的实现原理
11 0
|
4月前
|
安全 Oracle Java
(四)深入理解Java并发编程之无锁CAS机制、魔法类Unsafe、原子包Atomic
其实在我们上一篇文章阐述Java并发编程中synchronized关键字原理的时候我们曾多次谈到过CAS这个概念,那么它究竟是什么?
110 1
|
3月前
|
存储 安全 Java
【多线程面试题十七】、如果不使用synchronized和Lock,如何保证线程安全?
这篇文章探讨了在不使用`synchronized`和`Lock`的情况下保证线程安全的方法,包括使用`volatile`关键字、原子变量、线程本地存储(`ThreadLocal`)以及设计不可变对象。
|
6月前
|
安全 Java 编译器
Java 多线程系列Ⅴ(常见锁策略+CAS+synchronized原理)
Java 多线程系列Ⅴ(常见锁策略+CAS+synchronized原理)
|
5月前
|
Java 索引
JUC中的原子操作类及其原理
JUC中的原子操作类及其原理
|
6月前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(下)
61 0
|
6月前
|
存储 安全 Java
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)(上)
多线程编程常见面试题讲解(锁策略,CAS策略,synchronized原理,JUC组件,集合类)
73 0
|
安全 Java 编译器
【JavaEE】多线程进阶问题-锁策略and死锁,CAS操作,Synchronized原理
JavaEE & 多线程进阶问题 & 锁策略and 死锁,CAS操作,Synchronized原理
59 0
|
算法 前端开发 IDE
JUC中原子操作类原理分析
JUC中原子操作类原理分析
113 1
JUC中原子操作类原理分析
|
存储 算法 小程序
通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法
通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法
213 0
通过 JDK 原子并发类 AtomicInteger 彻底掌握 CAS 无锁算法