synchronized和ReentrantLock的区别

synchronized原理:
依赖操作系统底层互斥锁实现的,会在使用synchronized代码块前后加上monitorEnter和monitorExist指令实现的。当多个线程进入同步代码块后,首先进入entryList,当一个线程获取到monitor锁之后,就赋值给当前线程,并且技术器加1。线程执行完毕,释放锁,计数器减1,当前线程设置为null.
如果执行了wait命令则进入waitSet队列,使用notify活着notify之后重新加入entryList队列
ReentrantLock原理:
是基于比较并交换(CAS)+抽象队列同步器(AQS)实现的。
AQS维护了一个volatile int state和一个FIFO线程等待队列,多线程争抢资源被阻塞的时候就会进入这个队列自旋,获取到锁的线程状态设置为1,释放锁时将state设置为0
区别:
1.他们首先都是非公平锁,但是ReentrantLock可以设置为公平锁
2.ReentrantLock可以中断,设置自旋的时间
3.绑定多个条件:ReentrantLock可以同时绑定多个Condition条件对象。
CAS的原理:
变量内存地址V,旧的预期值为A,准备设置的新值为B ,当执行cas指令时 只有当V=A时才会更新,否则不会执行更新操作
volatile的原理:
保证不同线程对共享变量操作的可见性,也就是说一个线程修改了volatile修饰的变量,当修改写回主内存时,另外一个线程立即看到最新的值
通过设置内存屏障 防止指令重排

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值