Java6对synchronized的优化-锁升级过程详细过程

本文详细介绍了Java6中synchronized的优化,包括锁升级过程:无锁->偏向锁->轻量级锁->重量级锁。讨论了锁的状态、Java对象头的MarkWord、以及不同锁状态下的Mark Word内容。强调了锁升级的单向性和适应不同并发场景的重要性。

前言

以前我们在复习synchronized的时候,和lock一对比,总说它是一个重量级锁,性能很差,不如lock来的方便,但其实synchronized作为Java中元老级的关键字,很多jdk原始代码都有用到它,因此Java开发团队还是非常中意这个“私生子”的,所以为了给它减重,开发者也早在Java6就为synchronized专门设计了一套优化处理过程。

一、synchronized使用

  1. 加到方法上,锁就是这个对象,防止多个线程同时访问这个对象的synchronized方法;
  2. 加到静态方法,锁就是这个类的class对象,防止多个线程同时访问这个类的synchronized方法,对该类所有对象适用;
  3. 加到代码块,锁就是该代码块所在的对象,防止多个线程同时访问该代码块;

二、JVM对synchronized的实现方式

  1. 代码块同步:通过使用 monitorentermonitorexit 指令实现的
  2. 同步方法:ACC_SYNCHRONIZED 修饰

三、Java对象头(存储锁类型)

了解锁升级之前,必须先知道Java对象头,正式对象头记录的信息才实现了锁升级过程中的线程判断。

Java对象:

Java对象头:包含两部分:MarkWord 和 类型指针

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值