乐观锁

乐观锁在高并发场景下避免了线程阻塞,通过CAS算法保证原子性。JDK的Atomic类利用Unsafe实现原子操作,处理器通过总线锁定和缓存锁定保证多核环境下的数据一致性。
摘要由CSDN通过智能技术生成

基于Synchronized和Lock实现的同步锁机制,属于悲观锁,保护线程安全最直观的方式。

悲观锁在高并发场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性能开销。

乐观锁:在操作共享资源时,总是抱着乐观的态度执行,认为自己可以成功的完成操作;但当多个线程同时操作一个共享资源时,只有一个线程会成功,而失败的线程不会像悲观锁一样在操作系统中挂起,而仅仅是返回,并且系统允许失败的线程重试,也允许自动放弃退出操作。

所以,乐观锁相对悲观锁来说,不会带来死锁、饥饿等活性故障问题,线程间的相互影响也远远比悲观锁小;乐观锁没有因竞争造成的系统开销,在性能上也更胜一筹。

乐观锁的实现原理

CAS是实现乐观锁的核心算法,它包含了三个参数:共享变量的内存地址A、用于比较的值B、共享变量的新值C;只有当内存地址A处的值等于B时,才能将内存地址A处的值更新为新值C。作为一条CPU指令,CAS指令本身是能够保证原子性的。

CAS如何实现原子操作?

在JDK的concurrent包中,atomic路径下的类都是基于CAS实现的;

AtomicInteger依赖于本地方法Unsafe类,Unsafe中的操作方法会调用CPU底层指令实现原子操作。

    //基于CAS操作更新值
    public final boolean compareAndSet(int expect, int update) {
        return
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值