synchronized大盘点

利用synchronized实现同步的基础

Java 中的每一个对象都可以作为锁,具体表现为三种形式:

  • 对于普通同步方法,锁的是当前实例对象;
  • 对于静态同步方法,锁的是当前类的class对象;
  • 对于同步代码块,锁的是synchronzied括号中配置的对象。
    (静态为何锁的是class对象:synchronzied方法执行之前需要一个monitor,对于一个静态方法而言,monitor关联的是类对象;对于一个普通方法而言,monitor关联的是this对象)
java对象头

Synchronized用的锁是存在java对象头里的,如果对象头是数组类型,则虚拟机用3个字宽存储对象头;如果对象是非数组类型,则用2字宽存储对象头。

synchronzied实现原理(java对synchronied优化)

synchronized 是由一对 monitorenter/monitorexit 指令实现的,monitor 对象是同步的基本实现单元。在 Java 6 之前,monitor 的实现完全是依靠操作系统内部的互斥锁,因为需要进行用户态到内核态的切换,所以同步操作是一个无差别的重量级操作,性能也很低。但在 Java 6 的时候,JVM 对此进行了改进,提供了三种不同的 monitor 实现,也就是常说的三种不同的锁:偏向锁(Biased Locking)、轻量级锁和重量级锁,大大改进了其性能。

synch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值