乐观锁 : 调用时 , 假设资源没有被线程调用 , 调用前 , 调用方法将内存中资源的值和预期的原值进行比较 , 如果一致则更新 , 否则不做任何操作
悲观锁 : 调用时 , 假设资源总是被线程调用 , 每次使用时都加锁 , 例如sychronized
场景 :
-
乐观锁适用于重试代价不大 / 数据争用不严重 / 需要快速响应的场景
-
悲观锁使用于重试代价大 , 数据争用严重的场景
公平锁 : 多个线程去获取锁的时候 , 线程会直接进入队列 , 只能是队列第一位才能得到锁
非公平锁 : 多个线程去获取锁的时候 , 会尝试直接获取 , 获取不到 , 猜进入等待队列 , 如果能获取到 , 则直接获取到 , 非公平锁性能比公平锁块 5~10 倍
可重入锁 : 线程已经获取某个锁 , 可以再次获取 , 而不会出现死锁
属性锁 :
- 共享锁 : 当事务对数据加上读锁的时候 , 其他事务只能对数据加读锁 ,不能做任何的修改
主要是为了支持在并发的场景下的读取数据而出现的 , 读取数据时 , 不允许其他事务对当前的数据进行修改操作 , 从而避免 "不可重读" 的问题的出现
- 排他锁 : 当事务对数据加上写锁的时候 , 其他事务既不能对该数据添加读锁 , 也不能对该数据添加写锁 , 写锁和其他锁是互斥的 , 只有在当前数据的写锁被释放后 , 其他事务才能对其添加写锁或读锁
主要是为了解决在修改数据时 , 不允许其他事务对当前数据进行修改和读取操作 , 从而可以有效避免 "脏读" 的问题产生
标签:事务,调用,写锁,获取,线程,数据 From: https://www.cnblogs.com/three-oom/p/17834611.html