sychronized的使用
- 修饰方法
public synchronized void method(){}
- 修饰代码块
锁对象:
public void method(){
synchronized(this){
}
}
锁类:
public static void method(){
synchronized(xxx.class){
}
}
锁的对象是谁
synchronized可以锁对象也可以锁类
- 锁对象:修饰动态方法、修饰静态代码块的对象
- 锁类:在静态方法中修饰代码块class
锁升级过程
无锁,偏向锁,轻量级锁,重量级锁
sychronized和Lock的区别
- sychronized是java内置的关键字,Lock是java中的类。
- sychronized无法判断锁的状态,Lock可以判断是否获取到锁,例如trylock()。
- sychronized使用完成可以自动释放锁,Lock需要手动释放锁,否则会出现死锁情况。
- sychronized可以重入,不可中断,非公平,Lock可以重入,可以判断锁状态,可以设置是否公平锁。
- sychronized适合锁少量的同步代码,Lock适合锁大量的同步代码