synchronized关键字可分为对象锁和类锁,修饰对象可分为代码块和方法 。
修饰代码块:
1.对象锁:synchronized (this) 或 synchronized (object) :
如果是同一个实例,则代码块的执行有先后;如果不是同一个实例,则同时进行。
2.类锁:synchronized (xxxx.class):
多线程的场景下,每次只会让单个线程访问
修饰方法:
1.静态方法时:由于此时对象还未生成,所以采用的是类锁
2.非静态方法:对象已生成,默认是对象锁,同一个实例的多个线程会进行拦截,依次执行;不同实例的线程则同时访问执行