synchronized是多个线程共享同一个数据,用来保证同一时间只有一个线程在操作共享数据,其他线程要等待这个线程结束后,才能进行对共享数据的访问;
synchronized 的主要作用:
1. 确保线程互斥的访问同步代码
2. 能够保证共享数据被修改后及时看见
synchronized的3种用法:
1.修饰普通方法:一个对象中的加锁只允许一个线程去访问,这种情况下锁的是方法的实例,若果多个线程不同对象访问该方法,无法保证同步。
2.修饰静态方法:由于静态方法是类方法,这样情况下锁是包含这个方法的类,也就是类对象,多个线程不同对象访问该静态方法,可以保证同步
3.修饰代码块:sychronized(obj),这里的obj可以为类中的一个属性,也可以是当前的对象,同步效果和修饰普通方法一样;synchronized 方法(obj.class)静态代码块,同步效果和修饰静态方法类似。
如图: