Back End

015、synchronized底层如何实现?什么是锁的升级、降级?

PineappleCat · 5月11日 · 2021年 87次已读

synchronized使用方式

我们知道并发编程会产生各种问题的源头是可见性,原子性,有序性。
而synchronized能同时保证可见性,原子性,有序性。所以我们在解决并发问题的时候经常用synchronized,当然还有很多其他工具,如volatile。但是volatile只能保证可见性,有序性,不能保证原子性。

synchronized可以用在如下地方

  1. 修饰实例方法,对当前实例对象this加锁
  2. 修饰静态方法,对当前类的Class对象加锁
  3. 修饰代码块,指定加锁对象,对给定对象加锁

修饰实例方法

public class SynchronizedDemo {

    public synchronized void methodOne() {

    }
}

修饰静态方法

public class SynchronizedDemo {

    public static synchronized void methodTwo() {

    }
}

修饰代码块

public class SynchronizedDemo {

    public void methodThree() {
        // 对当前实例对象this加锁
        synchronized (this) {

        }
    }

    public void methodFour() {
        // 对class对象加锁
        synchronized (SynchronizedDemo.class) {

        }
    }
}

付费资源您未登录,请先

Click here to view the copyright notice of this site(点击此处查看本站版权声明)
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!