synchronized 隐式锁

Java Synchronized原理

Spring synchronized volatile | DCL

Lock 显示锁

synchronized 关键字下层的锁,是在 jvm 层面实现的

后来在 jdk 5 之后,在 juc 包里有了显式的锁,Lock 完全用 Java 写成,在java这个层面是无关JVM实现的。

但是却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种 synchronized 关键字所不具备的同步特性。

Lock 是一个接口,实现类常见的有:

实现基本都是通过聚合了一个同步器(AbstractQueuedSynchronizer 缩写为 AQS)的子类来完成线程访问控制的。

image.png

乐观锁 & 悲观锁

概念

image.png

适应场景