JAVA之CAS

本文探讨了CAS(比较并交换)技术在Java中的应用,如何作为非阻塞算法实现线程安全,同时介绍了ABA问题及版本号的解决方案。讨论了CAS的优缺点,如循环时间开销和仅限于单变量原子操作,并深入讲解了锁机制,特别是JVM中的偏向锁、轻量级锁和互斥锁。
摘要由CSDN通过智能技术生成

        1.CAS,比较并交换,(乐观锁的一种技术,.Java的非阻塞算法)

        2. 内存位置的值(V)、预期原值(A)和新值(B)。

                a.内存位置的值与预期原值相匹配,处理器会将该位置值更新为新值 。否则,处理器不做任何操作。

                b.它都会在 CAS 指令之前返回该位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。”

        3.目的:使用CAS就可以不用加锁来实现线程安全。

        4.缺点:a.ABA问题。ABA问题的解决思路就是使用版本号

                b.循环时间长开销大。自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销.

                c.只能保证一个共享变量的原子操作

        5.锁机制保证了只有获得锁的线程才能够操作锁定的内存区域。有偏向锁、轻量级锁和互斥锁。有意思的是除了偏向锁,JVM实现锁的方式都用了循环CAS,即当一个线程想进入同步块的时候使用循环CAS的方式来获取锁,当它退出同步块的时候使用循环CAS释放锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值