1,当给普通方法加锁的时候(用synchronized修饰),锁的是当前的对象,线程不可同时访问同一个对象中所有的synchronized修饰的方法及代码块。但非同步方法和代码块可以被访问。

2.  当用synchronized修饰静态方法的时候,因为静态方法是属于类的,所以,锁的是类的所有对象,线程不可同时访问该类的所有对象中的synchronized修饰的方法及代码块,只能串行化访问。

3.当使用synchronized(this){        }修饰代码块的时候锁的是当前对象,线程不可同时访问同一个对象中所有的synchronized修饰的方法及代码块。但非同步方法和代码块可以被访问。

4.当使用synchronized(class){       }修饰的时候,锁的是当前类的所有对象,线程不可同时访问该类的所有对象中的synchronized修饰的方法及代码块,只能串行化访问。

5.不能使用synchronized关键字修饰。构造方法也不能使用synchronized关键字,但是可以使用synchronized修饰代码块来同步。 

 

 

内容参考于:https://sawyersun.github.io/2016/10/18/Java-synchronized/