乐观锁和悲观锁的使用场景及应用——Java高并发系列学习笔记
一. 定义
1、乐观锁:顾名思义,对每次的数据操作都保持乐观的态度,不担心数据会被修改,所以不会对数据进行上锁。由于数据没有上锁,这就存在数据会被多人读写的情况。所以每次修改数据的时候需要对数据进行判断是否被修改过。
2、悲观锁:与乐观锁相反,对每次的数据操作都保存悲观的态度,总是担心数据会被修改,所以在自己操作的时候会对数据上锁,防止在自己操作的时候被他人同时操作导致更新丢失。
二. 使用场景
1、乐观锁:由于乐观锁的不上锁特性,所以在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。
2、悲观锁:对于每一次数据修改都要上锁,如果在DB读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在DB写大于读的情况。
三. 实现
乐观锁两种常用的实现方式
第一种是使用版本号或者时间戳。在表中加个version或updatetime字段,在每次更新操作时对此一下该字段,如果一致则更新数据,数据不等则放弃本次修改,根据实际业务需求做相应的处理。
第二种是CAS方式。 即Java中的compareAndSwap。CAS操作涉及到三个操作数,内存值(valueOffSet)、期望值(expect)、更新值(update)。当内存值与期望值一致时就会更新数据,反之不操作。
悲观锁三种常用的实现方式
第一种是数据库实现方式。 使用数据库的读锁、写锁、行锁等实现进程的悬挂阻塞等当前操作完成后才能进行下一个操作。
第二种是synchronize的实现方式。 在Java里面可以使用synchronize实现悲观锁。
第三种是使用封装JUC包的实现方式。 在Java中使用LinkedBlockingQueue、ArrayBlockingQueue等JUC的封装包来实现悲观锁,其根本原理是AQS,而AQS是synchronize的升级版。
乐观锁和悲观锁的使用场景及应用——Java高并发系列学习笔记相关推荐
- **Java有哪些悲观锁的实现_面试4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点?...
推荐阅读: 数据库面试4连问:分库分表,中间件,优缺点,如何拆分? 终极手撕之架构大全:分布式+框架+微服务+性能优化,够不够? 消息队列面试,你能顶得住面试官这波10大连环炮的攻势吗? 01 乐观锁 ...
- mysql共享锁使用方法_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景...
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- Java多线程学习总结(5)——乐观锁和悲观锁的基本概念、实现方式(含实例)、适用场景及常见面试题
分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.基本概念 乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题. 乐观锁 ...
- mysql锁的应用场景_浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |-- ...
- 乐观锁和悲观锁的含义-实现方式-应用场景
何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人. 悲观锁 总 ...
- 乐观锁和悲观锁区别以及使用场景
乐观锁和悲观锁是并发控制中两种不同的策略,用于解决多个线程或进程同时访问和修改共享数据时可能出现的并发问题. 悲观锁 悲观锁的基本思想是,在数据被访问时,假设会有其他的线程或进程也会访问这个数据,所以 ...
- 乐观锁和悲观锁的原理及应用场景
一.乐观锁和悲观锁的策略 1.悲观锁(一般都是通过锁机制来实现的) (1)每次去拿数据都会认为别人会修改,所以每次拿数据的时候都会上锁.比如:行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁.再比如 ...
- 经典问题之乐观锁和悲观锁及使用场景
悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁. 悲观锁: ...
- 乐观锁与悲观锁的概念、实现方式、场景、优缺点?
01 乐观锁与悲观锁的基本概念 何为乐观锁与悲观锁? 答:乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而 ...
最新文章
- 标准css属性,你一定要知道的css属性值规范
- 关于R和Python的安全机制
- java csv格式文件写入_java csv文件写入
- php(wamp安装问题)
- python 中float 的语法_python语法和基本数据类型
- ASP.NET MVC Training Kit发布了
- potplayer设置前进后退时间-左右按键
- (转)全文检索技术学习(二)——配置Lucene的开发环境
- 大数据?这些你了解吗?------之基础知识篇
- phinx数据库脚本迁移工具
- pandas小记:pandas数据规整化-正则化、分组合并及重塑
- 利用addr2line命令定位backtrace的Error行数
- AI机器学习面试常见问题与答案
- word插入对勾对号
- sql PK FK 区别
- XMind8激活为Pro教程(Windows+Mac)
- js中公有方法、特权方法、静态方法
- 《机器学习实战》——kNN
- 看,那些在台风中挣扎的记者们
- Photoshop 去除图片中文字六个方法