2019-10-29 09:17  阅读(2226)
文章分类:JMM

文章首发于:clawhub.club


作用

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性

修饰的对象

  1. 修饰代码块,作用范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象
  2. 修饰方法,作用范围是整个方法,作用的对象是调用这个方法的对象
  3. 修饰静态方法,作用范围是整个静态方法,作用的对象是这个类的所有对象
  4. 修饰类,作用范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象

注意

  1. 当一个线程访问对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该对象中的非synchronized(this)同步代码块。
  2. 当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
  3. synchronized关键字不能继承。
    对于父类中用synchronized 修饰的方法,子类在覆盖该方法时,默认情况下不是同步的,必须显式的使用 synchronized 关键字修饰才行, 当然子类也可以直接调用父类的方法, 这样就间接实现了同步.
  4. 在定义接口方法时不能使用synchronized关键字。
  5. 构造方法不能使用synchronized关键字,但可以使用synchronized代码块来进行同步。
  6. 离开同步代码块后,所获得的锁会被自动释放。

来源:https://www.jianshu.com/p/347ea7f881f8

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 【JMM】同步原语之Synchronized-简单介绍
上一篇
【JMM】内存模型之伪共享(False Sharing)
下一篇
【JMM】同步原语之volatile