锁定义和特征
乐观锁 VS 悲观锁
区别
乐观锁不会添加锁,无锁算法,没有线程被阻塞。悲观锁拿到资源就加锁,线程被阻塞。
乐观锁:CAS算法 Compare-And-Swap(比较并交换)的缩写,轻量级锁。
Java中,synchronized关键字和Lock的实现类都是悲观锁。
乐观锁适合读操作多的场景,悲观锁适合写操作多的场景
CAS算法
CAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。
CAS算法涉及到三个操作数:
-
需要读写的内存值 V。
-
进行比较的值 A。
-
要写入的新值 B。
当且仅当 V 的值等于 A 时,CAS通过原子方式用新值B来更新V的值(“比较+更新”整