学习
实践
活动
专区
工具
TVP
写文章

CASCAS原理「建议收藏」

1 CAS原理 CAS是所有原子类的底层原理,乐观锁主要采用CAS算法。 CAS,比较并交换,是JDK提供的非阻塞原子性操作,通过硬件保证比较-更新操作的原子性。 CAS操作利用CPU的特殊指令,由CPU保证原子性,完成一系列操作,不存在安全性问题。 CAS的变量需要用volatile修饰,以便在各线程之间保证可见。 CAS算法思想的使用场景 乐观锁 并发容器,例如ConcurrentHashMap 原子类 2 AtomicLong中CAS使用分析 // 获取Unsafe实例 private static final 的缺点 3.1 ABA问题 CAS是比较值,如果值相等则变换。 3.2 自旋时间长带来性能消耗 以AtomicLong为例,高并发场景下,如果线程一直无法进行CAS操作,内部是dowhile死循环,会一直自旋,消耗CPU。

10530
  • 广告
    关闭

    新年·上云精选

    热卖云产品新年特惠,2核2G轻量应用服务器9元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CAS原理图_cas机制原理

    主要原理 1 用户第一次访问一个CAS 服务的客户web 应用时(访问URL :http://192.168.1.90:8081/web1 ),部署在客户web 应用的cas AuthenticationFilter ,会截获此请求,生成service 参数 2 然后redirect 到CAS 服务的login 接口,url为https://cas:8443/cas/login? service=http%3A%2F%2F192.168.1.90%3A8081%2Fweb1%2F ,认证成功后,CAS 服务器会生成认证cookie ,写入浏览器,同时将cookie 缓存到服务器本地 web 应用时,AuthenticationFilter 在session 里读取不到用户信息,会去CAS 的login 接口认证,但这时CAS 会读取到浏览器传来的cookie ,所以CAS 不会要求用户去登录页面登录 cas原理流程图 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183895.html原文链接:https://javaforall.cn

    12120

    CAS底层原理(cas理论模型)

    CAS并发原语提现在Java语言中就是sun.miscUnSafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我实现CAS汇编指令.这是一种完全依赖于硬件 功能,通过它实现了原子操作。 无论哪种情况,它都会在 CAS 指令之前返回该 位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前 值。) 通常将 CAS 用于同步的方式是从地址 V 读取值 A,执行多步计算来获得新 值 B,然后使用 CAS 将 V 的值从 A 改为 B。如果 V 处的值尚未同时更改,则 CAS 操作成功。 而整个J.U.C都是建立在CAS之上的,因此相比synchronized阻塞算法,J.U.C在性能上有了很大的提升。 三、CAS存在的问题 虽然很高效的解决原子操作,但是CAS仍然存在三大问题。 A线程用CAS更新一个volatile变量,随后B线程用CAS更新这个volatile变量。

    13710

    cas server + cas client 单点登录 原理介绍

    CAS 介绍 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。 CAS 具有以下特点: 开源的企业级单点登录解决方案。 CAS Server 为需要独立部署的 Web 应用。 CAS 原理和协议 从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。 CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。 图1 是 CAS 最基本的协议过程: 图 1. CAS 基础协议 CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

    5.2K61

    CAS详解

    CAS在底层源码中是使用非常广的,像我之前的HashMap源码解析、volatile详解等文章都有提到CAS。本文将详细介绍CAS。 一、什么叫CAS? 之前说到AtomicInteger用到了CAS,那么先从这个类说起。 这就是比较并交换,也即CAS。 二、CAS的工作原理 简而言之,CAS工作原理就是UnSafe类和自旋锁。 而CAS并发性提高了,但是由于CAS存在自旋操作,即do while循环,如果CAS失败,会一直进行尝试。如果CAS长时间不成功,会给CPU带来很大的开销。 2、只能保证一个共享变量的原子性。 总结: 1.什么是CAS? ------ 比较并交换,主内存值和工作内存值相同,就set为更新值。 2.CAS原理是什么? ------ UnSafe类和自旋锁。理解那个do while循环。

    44120

    CAS解析

    CAS(Compare And Swap)概述 CAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。 这个指令会对内存中的共享数据做原子的读写操作 CAS是JUC的基石,许多操作都是基于CAS实现的,如图所示: CAS个指令的操作过程:首先,CPU 会将内存中将要被更改的数据与期望的值做比较。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则返回V。 在jdk1.8改成了unsafe类来操作 ABA问题 ABA问题是指在CAS操作时,其他线程将变量值A改为了B,但是又被改回了A,等到本线程使用期望值A与当前变量进行比较时,发现变量A没有变,于是CAS 操作中的比较就不依赖于变量的值了 参考资料 深入分析CAS CAS原理分析 JDK1.8中AtomicInteger

    8810

    java应用CAS

    CAS(Compare and Swap),即比较并替换。jdk里的大量源码通过CAS来提供线程安全操作,比如AtomicInteger类。 采用CAS操作的前题假设是数据竟争不是很严重的情况,如果有大量的线程并发,while里的循环可能就要跑的时间很长了。那除了通过Unsafe类来实现CAS操作,我们还有其它的选择么? 我们可以利用JDK给我们提供的API来实现CAS的操作。 的ABA问题 CAS的算法通过判断内存的值是否与原值相等来进行修改操作,这就有可能会发生下面的问题。 ABA问题 如果场景是和过程状态无关的,只跟结果有关系,那么影响不大,但是有些情况之下,场景可能和过程有关的.当你对数据变化过程是敏感的时候,普通的CAS操作是无法辨别上图2个A的区别的。

    42230

    CAS和AQS

    CAS     CAS的全称为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。 CAS并发原语体现在JAVA语言中就是       sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能。 那么为什么CAS会出现呢?它的作用是怎样的? 实现并发的传统方式是加锁,JAVA中的锁有synchronized和Lock。Lock是基于AQS和CAS实现的,在此先不叙述。 在代码中使用CAS自旋volatile变量的形式实现非阻塞并发。这种方式是CAS的主要使用方式。   CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。 获取锁通过CAS,那么没有获取到锁,等待获取锁是如何实现的?我们可以看一下else分支的逻辑,acquire方法: tryAcquire:会尝试再次通过CAS获取一次锁。

    11120

    CAS实现原理

    前言 JUC是java.util.concurrent包的简称,JUC有2大核心,CAS和AQS,CAS是java.util.concurrent.atomic包的基础 @NotThreadSafe public 检测是否与其他线程存在共享数据竞争,如果没有则让此操作成功,如果存在共享数据竞争则不断地重新执行操作,直到成功为止,重新尝试的过程叫自旋 java.util.concurrent.atomic包就用到了CAS 介绍 CAS(Compare and Swap), 翻译成比较并交换。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 ? 比较合适,并发比较高用synchronized比较合适 CAS的缺点 1.只能保证对一个变量的原子性操作 2.长时间自旋会给CPU带来压力 3.ABA问题

    51230

    CAS 原子操作

    ---- 理会CASCAS:   有时候面试官面试问你的时候,会问,谈谈你对CAS的理解,这时应该有很多人,就会比较懵,当然,我也会比较懵,当然我和很多人的懵不同,很多人可能,并不知道CAS是一个什么东西 ,而在我看来我是不知道他问的是那个CAS   我一般会问面试官,问他问的CAS是"原子操作",还是"单点登录"   因为在JAVA并发中的原子操作是称为CAS的,也就是英文单词CompareAndSwap CAS(Compare And Swap):   我们先要学习的是并发编程中的CAS,也就是原子操作   那么,什么是原子操作?如何实现原子操作?   CAS以一种乐观锁的方式实现并发控制 如何实现原子操作:   Java可以通过锁和循环CAS的方式实现原子操作 为什么要有CAS:    CAS就是比较并且替换的一个原子操作,在CPU的指令级别上进行保证 CAS的目的:   利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法。其它原子操作都是利用类似的特性完成的。

    23220

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 归档存储

      归档存储

      腾讯云归档存储(Cloud Archive Storage, CAS)是面向企业和个人开发者提供的低成本、高可靠且易于管理的云端离线存储服务,适用于海量、非结构化数据长时间备份,实现数据的容灾和c。归档存储采用分布式云端存储,您可以通过 RESTful API 对存储的数据进行访问。归档存储易于管理,您无需关心硬件维护及容量扩展;按实际使用量付费,为您节省额外成本。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券