大伙在面试的时候应该会经常碰到线程 并发方面的问题,而且也会问到你各种分布式锁的概念,本文就给大家整理了下各种锁的分类,希望对你有所帮助。
锁的分类
我们先总体的来看看有哪些具体的分类
一、乐观锁/悲观锁
注意,乐观锁与悲观锁并不是具体的两种锁的实现,而一种设计思想。
乐观锁
顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。
乐观锁适用于多读的应用类型,这样可以提高吞吐量,不加锁会带来大量的性能提升,在Java中
java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS(Compare and Swap 比较并交换)实现的。
实现方式
数据版本机制
实现数据版本一般有两方式,
- 第一种是使用版本号
- 第二种是使用时间戳。
以版本号方式为例。
版本号方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加