解锁Java并发编程:深入synchronized关键字

Synchronized 实现同步的基础:
  1. Java 中的每一个对象都可以视作为锁,具体表现为:
    1. 对于普通方法,锁是当前实例对象
    2. 对于静态同步方法,锁是当前类的 Class 对象
    3. 对于同步方法块,锁是 Synchonized 括号里配置的对象
  2. 当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁
Synchronized 实现原理:
  1. JVM 基于进入和退出 Monitor 对象来实现方法同步和代码块同步
  2. 代码块同步:时使用 monitorenter 和 monitorexit 指令来实现的
  3. 方法同步:没有详细说明,但是可以使用这两个指令来实现
    1. monitorenter 指令:在编译后插入到同步代码块的开始位置
    2. monitorexit 指令:是插入到方法结束和异常处
  4. JVM 要保证每个 monitorenter 必须有对应的 monitorexit 与之匹配
  5. 任何对象都有一个 monitor 与之关联,当且一个 monitor 被持有后,它将处于锁定状态
  6. 线程执行到 monitorenter 指令时,将会尝试获取对象所对应的 monitor 的所有权,即尝试获得对象的锁
Java 对象头:
  1. synchronized 用的锁存在 Java 对象头里
  2. 如果对象是数组类型,则虚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值