一、基本用法
1、修饰代码块:指定加锁对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁
//多线程情况下需要保证是同一个对象锁
synchronized (对象锁){
代码块
}
事例:
2、修饰实例方法:作用于当前实例加锁,进入同步代码前要获得当前实例的锁
事例:如果加在实例方法上,则使用this锁
3、修饰静态方法:作用于当前类对象加锁(.class),进入同步代码前要获得当前类对象的锁
如果加在静态方法上,则使用当前类名称.class
二、synchronized死锁问题
如下代码为嵌套锁,将产生死锁(尽量避免写嵌套锁)