前言
以前我们在复习synchronized的时候,和lock一对比,总说它是一个重量级锁,性能很差,不如lock来的方便,但其实synchronized作为Java中元老级的关键字,很多jdk原始代码都有用到它,因此Java开发团队还是非常中意这个“私生子”的,所以为了给它减重,开发者也早在Java6就为synchronized专门设计了一套优化处理过程。
一、synchronized使用
- 加到方法上,锁就是这个对象,防止多个线程同时访问这个对象的synchronized方法;
- 加到静态方法,锁就是这个类的class对象,防止多个线程同时访问这个类的synchronized方法,对该类所有对象适用;
- 加到代码块,锁就是该代码块所在的对象,防止多个线程同时访问该代码块;
二、JVM对synchronized的实现方式
- 代码块同步:通过使用 monitorenter 和 monitorexit 指令实现的
- 同步方法:ACC_SYNCHRONIZED 修饰
三、Java对象头(存储锁类型)
了解锁升级之前,必须先知道Java对象头,正式对象头记录的信息才实现了锁升级过程中的线程判断。
Java对象ÿ