java锁机制之CAS、synchronized、ReentrantLock

CAS原理:

CAS(compare and swap)是java.util.concurrent并发的包中用的很多,是这个包的核心,因为它不通过JVM,可以直接利用JNI调用CPU 的cmpxchg(汇编指令),不用经历内核态阻塞这一过程,利用JNI来完成Java的非阻塞算法,实现原子操作。CAS中有三个操作数,内存值v,原预期值a和即将修改的预期值b,若果内存值v与a值相匹配,那么将b值修改到内存值v,反之保持原v值。CAS可以说是个乐观锁技术,若果有多个线程同时操作一个共享变量时,只有其中一个线程可以修改,其他的线程都将失败,进行下一次竞争尝试


synchronized:

在jdk6后对synchronized进行了优化,也是从减少通过内核态操作,来提高性能,底层实现主要依靠Lock-Free队列,类似CAS方式,提高吞吐量,分非公平性锁,线程较少时跟CAS性能差不多,在线程冲突比较大的情况下性能比CAS要高很多。

ReentrantLock: 

ReentrantLock的实现也是利用对CAS进行循环调用来实现加锁,性能好,可以避免线程进入内核态的阻塞状态,它是在jdk1.5之后提出的API层面的互斥锁。利用lock()和unlock()结合try/finally实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值