Java类锁与方法锁(synchronized 实现)

对象锁,是针对一个对象实例的,它只在该对象的某个内存位置声明一个标识该对象是否拥有锁,所有它只会锁住当前的对象,而并不会对其他对象实例的锁产生任何影响,不同对象访问同一个被synchronized修饰的方法的时候不会阻塞。

类锁是锁住整个类,当有多个线程来声明这个类的对象时候将会被阻塞,直到拥有这个类锁的对象呗销毁或者主动释放了类锁,这个时候在被阻塞的线程被挑选出一个占有该类锁,声明该类的对象。其他线程继续被阻塞住。

一、对象锁的几种表现形式

1. synchronized修饰普通方法

Java类锁与方法锁(synchronized 实现)

2.synchronized修饰的代码块传入this

Java类锁与方法锁(synchronized 实现)

3. synchronized修饰传入的普通对象

Java类锁与方法锁(synchronized 实现)

推荐使用第2,3种,因为可以方便控制粒度,有高的效率

 二、类锁的几种表现形式

1.synchronized修饰静态方法

Java类锁与方法锁(synchronized 实现)

2.synchronized修饰class

Java类锁与方法锁(synchronized 实现)

3. synchronized修饰静态对象

Java类锁与方法锁(synchronized 实现)