阿亮的日志

  • 首页
  • 分类
  • 归档
  • 关于

  • 搜索
事务 feign b 有序性 原子性 可见性 volatile 并发编程 hystrix 源码 eureka springcloud JVM

4. synchronized工作原理

发表于 2021-03-17 | 分类于 并发编程 | 0 | 阅读次数 30

1.入门知识回顾

synchronized可以作用在对象实例和,类两者的区别

2.底层原理

核心原理是 monitorenter和monitorexit两个指令

源文件

  • synchronized加锁的对象,都会有一个monitor计数器,从0开始,如果一个线程要获取monitor的锁,需要判定该值是否为0,若为0,则获取到锁,并将值+1,此时monitor=1.jvm会记录持有该锁的线程。
  • 并且monitor锁是可重入的,原理就是,获取锁的时候如果monitor不是1,会判定持有该锁的是否为当前线程,如果是的话对计数器是自增操作,此时monitor=2。
  • 如果出了synchronized修饰的代码片段,就会有一个monitorexit的指令,在底层会对monitor的计数器减一,如果多次重入就会对应多次减一,直到计数器是0

3.关于

  • Github: https://github.com/liangliang1259/common-notes
  • 公众号
坚持有质量的创作,您的支持将支持我继续创作!
阿亮 微信支付

微信支付

阿亮 支付宝

支付宝

  • 本文作者: 阿亮
  • 本文链接: http://sunliangliang.com/?p=43
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 事务 # feign # b # 有序性 # 原子性 # 可见性 # volatile # 并发编程 # hystrix # 源码 # eureka # springcloud # JVM
04.Feign请求处理流程
6.ReentrantLock与AQS的原理
  • 文章目录
  • 站点概览
阿亮

阿亮

26 日志
11 分类
13 标签
RSS
Github E-mail
Creative Commons
0%
© 2021 阿亮
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4