Synchronized的实现与原理

此文乃《Java并发编程的艺术》读书笔记。购买链接

实现的基础

java中的每一个对象都可以作为锁
其表现形式为:
1.对于普通同步方法,锁是当前类的实例对象
2.对于静态同步方法,锁是当前类的Class对象
3.对于同步代码块,锁是synchronized括号里配置的对象

synchronized在JVM的实现

JVM基于进入和退出Monitor对象来实现方法同步和代码块同步。但是两者的实现细节不一样。
代码同步块是使用monitorenter和monitorexit指令来实现的
具体细节如下:
monitorenter指令是在编译后,插入到代码同步块开始的位置,而monitorexit是插入到代码结束处和异常处,JVM要保证每一个monitorenter都有一个与之对应的monitorexit。任何对象都有一个monitor与之关联,当一个monitor被持有后,它就处于被锁定的状态。线程执行到monitorenter指令后,将会尝试获取对象的monitor,如果成功获取,则说明线程持有该对象的锁。

Synchronized的锁是存储在Java对象头里面的

关于Java对象头的详细解释,请看这里这里写链接内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值