【JMM】同步原语之Synchronized-简单介绍
作用
synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性
修饰的对象
- 修饰代码块,作用范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象
- 修饰方法,作用范围是整个方法,作用的对象是调用这个方法的对象
- 修饰静态方法,作用范围是整个静态方法,作用的对象是这个类的所有对象
- 修饰类,作用范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象
注意
当一个线程访问对象的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该对象中的非synchronized(this)同步代码块。
当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
synchronized关键字不能继承。
对于父类中用synchronized 修饰的方法,子类在覆盖该方法时,默认情况下不是同步的,必须显式的使用 synchronized 关键字修饰才行, 当然子类也可以直接调用父类的方法, 这样就间接实现了同步.在定义接口方法时不能使用synchronized关键字。
构造方法不能使用synchronized关键字,但可以使用synchronized代码块来进行同步。
离开同步代码块后,所获得的锁会被自动释放。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!