UNIX(多线程):26---悲观锁和乐观锁
锁(Lock):
在介绍悲观锁和乐观锁之前,让我们看一下锁。锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜上有锁,是用来保护我们财产安全的。程序中也有锁,当多个线程修改共享变量时,我们可以给修改操作上锁(syncronized)。当多个用户修改表中同一数据时,我们可以给该行数据上锁(行锁)。因此,锁其实是在并发下控制多个操作的顺序执行,以此来保证数据安全的变动。 并且,锁是一种保证数据安全的机制和手段,而并不是特定于某项技术的。悲观锁和乐观锁亦是如此。
悲观锁(Pessimistic Lock)
顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。
UNIX(多线程):26---悲观锁和乐观锁相关推荐
- JUC - 多线程之悲观锁、乐观锁,读写锁(共享锁、独享锁),公平非公平锁,可重入锁,自旋锁,死锁(十)
Java中主要有如下锁 一.悲观锁.乐观锁 悲观锁:当前线程去操作数据的时候,总是认为别的线程会去修改数据,所以每次操作数据的时候都会上锁,别的线程去操作数据的时候就会阻塞,比如synchronize ...
- Java多线程学习十二:悲观锁和乐观锁的本质||
悲观锁和乐观锁是从是否锁住资源的角度进行分类的. 悲观锁 悲观锁比较悲观,它认为如果不锁住这个资源,别的线程就会来争抢,就会造成数据结果错误,所以悲观锁为了确保结果的正确性,会在每次获取并修改数据时, ...
- Java多线程学习总结(6)——深入理解悲观锁与乐观锁
分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.锁(Lock)的概念 锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜 ...
- 悲观锁和乐观锁_乐观锁和悲观锁 以及 乐观锁的一种实现方式-CAS
悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞知道它拿到锁.传统的关系型数据库里面就用到了很多的这种锁机制,比如行锁,表锁等 ...
- 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...
前言 生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来.电动车被偷等等. 但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就 ...
- 数据库:悲观锁与乐观锁
何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人. 悲观锁 总 ...
- 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...
- 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理
共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...
- 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁
1. 线程调度 线程调度指的就是给线程分配使用处理器的过程.主要的调度方式有两种:协同式调度和抢占式调度. 1.1 协同式调度 线程完成自己的任务之后主动通知系统切换到另一个线程上. 优点: 实现简单 ...
最新文章
- [九度][何海涛] 数组中出现次数超过一半的数字
- 石头扫地机器人加速异响_米家扫地机器人有异响怎么办
- 游戏运营期间我的项目开发经验总结——纪律性和卡顿处理
- 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
- SSM框架搭建+easyui增删改查
- 华科05年计算机考研复试机试
- [算法] 已知前序和后序遍历,建立二叉树
- [debug] PyCharm 退出 pytest in XXX.py,恢复run XXX.py
- restful soap_Web服务面试问题– SOAP,RESTful
- C# Parse和Convert的区别分析
- python可迭代对象 迭代器生成器_第八章 Python可迭代对象、迭代器和生成器-阿里云开发者社区...
- php bing翻译的api,使用PHP和SOAP访问Bing翻译服务
- icem合并面网格_ICEM CFD中合并多个网格
- HbuilderX中 华为手机 真机调试
- 【数字图像处理matlab】RGB转HIS,HIS转RGB
- 资本运作下的腾讯和帝国梦想
- 计算机分层和tcp分层_认知分层的机械权威与人类权威
- Javascript中的shift() 、unshift() 和 pop()、push()区别
- 适合前端新手的十大网站
- VMware ESXi添加NVMe硬盘扩容
热门文章
- X210烧写linux系统
- ELF文件和BIN文件
- bbb u-boot 验证 emmc
- 交叉编译ncurses5.6
- wince下获取mac地址的简单方法!
- 发一个自己写的2440驱动1602的资料(电路+代码)
- em算法 实例 正态分布_EM算法解GMM
- 形位公差符号大全_玩转CAD快捷键(大全),一篇文章就够了
- php5.4 windows2003,PHP实战:Windows2003下php5.4安装配置教程(IIS)
- nubia android root权限,获取中兴NX403a (Nubia Z5S Mini Android 4.2)ROOT权限教程,新手必看...