2种分类法
一、一类8种
1、乐观锁/悲观锁
2、独享锁/共享锁
3、互斥锁/读写锁
4、可重入锁
5、公平锁/非公平锁
6、分段锁
7、偏向锁/轻量级锁/重量级锁
8、自旋锁
参考:https://www.cnblogs.com/hustzzl/p/9343797.html
二、一类有3类
方法锁、对象锁、类锁。(方法锁也是对象锁的一种)
1、对象锁
对象锁
public class object {
private Lock lock = new ReentrantLock();//JavaSE1.5.新增了一个java.util.concurrent包来支持同步
public void method(){
synchronized(this){
System.out.println("我是对象锁");
}
}
}
public synchronized void method(){ //默认使用类实例this当做锁
System.out.println("我是对象锁也是方法锁");
}
这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中只有一个可执行,从而有效避免了类成员变量的访问冲突
synchronized只能用来修饰普通方法、静态方法、代码块,如要修饰类需括号括起来,不能用于修饰变量。修饰变量用volatile
synchronized且不能继承,子类方法要同步必须在子类方法添加synchronized
2、类锁
一个class的静态方法和静态变量在内存中只会加载和初始化一份,一旦一个静态的方法被申明为synchronized,此类的所有的实例化对象在调用该方法时,共用同一把锁,称之为类锁。
形式一:
public class object {
public static synchronized void method(){
System.out.println("我是第一种类锁");
}
}
形式二:
public class object {
public void method(){
synchronized (object.this) {
System.out.println("我是第二种类锁");
}
}
}