1. 根据修饰对象分类
synchronized 可以修饰方法和代码块
-
修饰代码块
-
synchronized(this|object) {}
-
synchronized(类.class) {}
-
-
修饰方法
-
修饰非静态方法
-
修饰静态方法
-
2. 根据获取的锁分类
-
获取对象锁
-
synchronized(this|object) {}
-
修饰非静态方法
-
-
获取类锁
-
synchronized(类.class) {}
-
修饰静态方法,非静态方法
-
总结
1、对于静态方法,由于此时对象还未生成,所以只能采用类锁;
2、只要采用类锁,就会拦截所有线程,只能让一个线程访问。
注意:不管任何类。都起作用
3、对于对象锁(this),如果是同一个实例,就会按顺序访问,
但是如果是不同实例,就可以同时访问。
4、如果对象锁跟访问的对象没有关系,那么就会都同时访问。