二十二 synchronized同步方法

一 Synchronized锁:

  1 synchronized取得的锁都是对象锁,而不是把一段代码或方法加锁。

     synchronized是给该方法的实例对象加锁。如果多个线程访问的是同一个对象

     的synchronized方法,就可以同步。

  2 对象中的非synchronized类型的方法是不需要等待锁的。

  3 不同的synchronized方法之间也是互斥的,因为锁的是对象!

二 Synchronized锁重入:

  1 synchronized具有锁重入的功能,同一个线程可以多次获得一个对象的锁。也就是说:一个synchronized方法内部调用本类的其他synchronized方法时,是永远             可以得到锁的。

        2 可重入锁也支持在父子继承的情况下

        3  出现异常情况,锁自动释放。当一个线程执行的代码出现异常时,其所有的锁会自动释放。

   4 子类继承父类的同步方法时,如果希望也是同步方法需要加上synchronized关键字。

三 synchronized同步语句块

  1 控制的粒度更细致,效率更高。

   2 synchronized (this)

   3 当一个线程访问object的一个synchronized(this)同步代码块,其他线程对同一object中所有的其他synchronized(this)同步代码块的访问都将被阻塞,说明synchronized使用的“对象监视器”是一个。

四 将任意对象作为对象监视器

  多个线程调用同一个对象中的不同名称的synchronzied同步方法或synchronzied(this)同步代码块时,调用的效果就是按顺序执行,也就是同步,阻塞。

  锁非this对象的优点:比如一个类中四个方法,方法1和2需要同步,方法3和4需要同步,这个时候就可以用非this的锁,效率高。

 五 静态同步synchronized方法与synchronized(class)代码块     

  关键字synchronized还可以用在static静态方法上,这样写,是对当前加锁。

  类锁可以对类的所有对象实例起作用。 

 

  

原文地址:https://www.cnblogs.com/liufei1983/p/9873519.html