JAVA锁原理和选择synchronized & Lock

废话不多说,进正题,参考一下synchronized 的实现原理

synchronized 的实现原理

JVM可以从方法常量池中的方法表结构(method_info Structure) 中的 ACC_SYNCHRONIZED 访问标志区分一个方法是否同步方法。当方法调用时,调用指令将会 检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程将先持有monitor(虚拟机规范中用的是管程一词), 然后再执行方法,最后再方法完成(无论是正常完成还是非正常完成)时释放monitor。在方法执行期间,执行线程持有了monitor,其他任何线程都无法再获得同一个monitor。如果一个同步方法执行期间抛 出了异常,并且在方法内部无法处理此异常,那这个同步方法所持有的monitor将在异常抛到同步方法之外时自动释放。
说白了就是状态锁,JVM分配一个内存保存状态,此状态标识该方法是不是被synchronized 修饰,如果是那么执行这个方法的时候monitor+1,然后监视monitor,如果monitor!=-1 那么其他线程等待,方法执行完(正常或异常)JVM都会主动释放锁monitor-1,不需要我们瞎操心,LOCK和synchronized 的区别在此,LOCK需要我们手动释放锁,JVM的亲儿子是synchronized ,所以还是好好用synchronized 吧,不要跟JVM过不去。


好,看了上面的东西,如果自己实现锁的话,要怎么办呢,关注2点

  1. 状态----该资源是否被占用
  2. 释放锁—包括正常和异常情况

好,那我就靠这个做一个分布式锁试试,下篇讲解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值