多线程学习——锁的分类(待更新)
来源:互联网 发布:mac 移动硬盘 ntfs 编辑:程序博客网 时间:2024/06/12 20:45
乐观锁:乐观锁严格来说算是一种加锁策略,大致的思路是通过一个版本号或者时间戳之类的标识来控制数据更新的成功和失败。首先读取出带版本号或者时间戳的数据,然后通过版本号或者时间戳匹配数据,最后在更新数据的同时对版本号自增或者时间戳自增来实现乐观锁。如果读取的数据已经发生改变,则这个更新会由于版本号或者时间戳的改变而失败,反之则是会成功且版本号或者时间戳发生了改变。
PS:Zookeeper中的节点数据更新就是使用乐观锁的策略悲观锁:悲观锁也是一种加锁策略,它的策略与乐观锁相反。悲观锁是在整个数据的处理过程中,会将数据进行锁定,只有在整个处理完成之后才允许其他处理流程(排它性)。
排它锁:排它锁是基于悲观锁的加锁策略,排它锁又称为写锁(exclusive lock,简记为X锁)。最常见的排它锁出现在数据库中。
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。在更新操作(INSERT、UPDATE 或 DELETE)过程中始终应用排它锁。
PS:引用来源于百度百科,java.util.concurrent.locks.ReentrantLock、synchronized就是基于排它锁共享锁:共享锁又称为读锁(share lock,简记为S锁)
若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
PS:引用来源于百度百科,java.util.concurrent.CountDownLatch就是基于共享锁可重入锁:可重入锁也叫递归锁指的是同一个线程可以多次获取同一个锁而不会产生死锁。
指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
PS:引用来源于并发编程网-Java锁的种类以及辨析(四):可重入锁
- 多线程学习——锁的分类(待更新)
- webpack(beta)——待更新
- 待学习与解决的问题(持续更新中......)
- 推荐的技术学习网站(待更新)
- 使用python进行多分类会用到的函数(待更新)
- 算法爱好者——颜色分类 ? 待解决
- 机器学习2——分类和逻辑回归Classification and logistic regression(牛顿法待研究)
- oracle11g 学习笔记(待更新。。。)
- html5 标签img学习(待更新)
- python入门学习笔记(待更新 + 整理)
- Java学习之继承(待更新)
- linux程序设计——多线程小结以及待完成的小游戏(第十二章)
- 待学习的内容
- 待学习的论文
- 待学习的博客
- 待学习的姿势
- Mysql体系结构详解——后台线程(待更新)
- 待更新
- Largest prime factor 素数筛(素数打表,打表不优美会爆)
- Unity游戏开发网络基础(1)
- MyBatis在SSM中的用法
- linear-gradient()
- Vue 数组视图不能更新的解决方案
- 多线程学习——锁的分类(待更新)
- JVM学习03——类加载机制
- ios app混合开发中iframe的scroll滚动失效解决方法
- CTF writeup:python脚本爆破zip密码
- 关于HTML5请求WebSocket,404的问题
- 树莓派中mysql(5.5)乱码
- 《加密与解密》笔记五(一)
- A
- POJ-2449 Remmarguts' Date(A*算法+SPFA求第K短路)