1、修饰代码块:
①synchronized(this) :获取当前对象锁,锁住的是当前整个对象(同同步方法)
当一个线程已经访问到代码块,其他对象访问该代码块将会被阻塞,直到锁释放。同样,其他线程访问非synchronize块的部分。
②synchronized(*.class):获取class对象锁,锁住的是所有对象(同同步静态方法)
当随意一个对象进去代码块,所有该类对象都不可进去该代码块,将会被阻塞。
③两个synchronize之间会有互斥性
2、修饰方法:
①同步静态方法:同步静态方法是指对所有同步静态方法进行加锁同步
②普通同步方法:同步方法的是指对实例对象本身进行加锁同步
如果线程拥有同步和非同步方法,则非同步方法可以被多个线程自由访问而不受锁的限制。
线程可以获得多个重进入(synchronized )锁。比如,在一个对象的同步方法里面调用另外一个对象的同步方法,则获取了两个对象的同步锁。
3、同步会影响效率,比起同步方法,更好使用同步代码块