从锁升级的角度理解synchronized
前言 在 Java 中为保证线程安全,可以使用关键字 synchronized 保护代码,在多个线程之间同时只能有一个线程执行被保护的代码。 synchronized 锁的到底是什么?是对象,还是代码块呢? 保证线程安全已经有了 synchronized 为什么又会出现 Lock 呢,二者之间有什么区别呢? synchronized 一定比 Lock 性能差吗? synchronized 的锁升级过程是什么,偏向锁,轻量级锁,自旋锁,重量级锁怎么一步一步实现的? synchronized 使用 1、用在静态方法 public class SimpleUserSync { public static int a = 0; // 相当于 synchronized (SimpleUserSync.class){a++;} public synchronized static void addA_1() { a++; } } 2、用在成员方法上 public class SimpleUserSync { public static int a = 0; // 相当于 synchronized (this){a++;} public synchronized void addA_1() { a++; } } 3、用在代码块 private static final Object LOCK