1、修饰实例方法
public synchronized void A(){}
这个时候锁的是当前的实例对象。多线程操作同一个实例的实例方法时,才会阻塞。
2、修饰静态方法
public synchronized static void A(){}
这个时候锁的是整个类下所有的实例对象,静态方法是存在于方法区的,只有一个,即使不同实例来调用这个方法,也会发生阻塞。
3、修饰代码块
锁括号中的实例对象
synchronized(Object){}
这个锁的是当前实例对象,this表示的是当前实例对象
synchronized(this){}
锁的是***.class整个类
synchronized(***.class){}