锁(Lock):
在介绍悲观锁和乐观锁之前,让我们看一下锁。锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜上有锁,是用来保护我们财产安全的。程序中也有锁,当多个线程修改共享变量时,我们可以给修改操作上锁(syncronized)。当多个用户修改表中同一数据时,我们可以给该行数据上锁(行锁)。因此,锁其实是在并发下控制多个操作的顺序执行,以此来保证数据安全的变动。 并且,锁是一种保证数据安全的机制和手段,而并不是特定于某项技术的。悲观锁和乐观锁亦是如此。

悲观锁(Pessimistic Lock)

顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

UNIX(多线程):26---悲观锁和乐观锁相关推荐

  1. JUC - 多线程之悲观锁、乐观锁,读写锁(共享锁、独享锁),公平非公平锁,可重入锁,自旋锁,死锁(十)

    Java中主要有如下锁 一.悲观锁.乐观锁 悲观锁:当前线程去操作数据的时候,总是认为别的线程会去修改数据,所以每次操作数据的时候都会上锁,别的线程去操作数据的时候就会阻塞,比如synchronize ...

  2. Java多线程学习十二:悲观锁和乐观锁的本质||

    悲观锁和乐观锁是从是否锁住资源的角度进行分类的. 悲观锁 悲观锁比较悲观,它认为如果不锁住这个资源,别的线程就会来争抢,就会造成数据结果错误,所以悲观锁为了确保结果的正确性,会在每次获取并修改数据时, ...

  3. Java多线程学习总结(6)——深入理解悲观锁与乐观锁

    分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 一.锁(Lock)的概念 锁,在我们生活中随处可见,我们的门上有锁,我们存钱的保险柜 ...

  4. 悲观锁和乐观锁_乐观锁和悲观锁 以及 乐观锁的一种实现方式-CAS

    悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞知道它拿到锁.传统的关系型数据库里面就用到了很多的这种锁机制,比如行锁,表锁等 ...

  5. 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...

    前言 生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来.电动车被偷等等. 但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就 ...

  6. 数据库:悲观锁与乐观锁

    何谓悲观锁与乐观锁 乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人. 悲观锁 总 ...

  7. 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

    首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...

  8. 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理

    共享锁(S锁) 又称为读锁,可以查看但无法修改和删除的一种数据锁.如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁.获准共享锁的事务只能读数据,不能修改数据. 共享锁下其它用 ...

  9. 线程调度、公平锁和非公平锁、乐观锁和悲观锁、锁优化、重入锁

    1. 线程调度 线程调度指的就是给线程分配使用处理器的过程.主要的调度方式有两种:协同式调度和抢占式调度. 1.1 协同式调度 线程完成自己的任务之后主动通知系统切换到另一个线程上. 优点: 实现简单 ...

最新文章

  1. [九度][何海涛] 数组中出现次数超过一半的数字
  2. 石头扫地机器人加速异响_米家扫地机器人有异响怎么办
  3. 游戏运营期间我的项目开发经验总结——纪律性和卡顿处理
  4. 【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
  5. SSM框架搭建+easyui增删改查
  6. 华科05年计算机考研复试机试
  7. [算法] 已知前序和后序遍历,建立二叉树
  8. [debug] PyCharm 退出 pytest in XXX.py,恢复run XXX.py
  9. restful soap_Web服务面试问题– SOAP,RESTful
  10. C# Parse和Convert的区别分析
  11. python可迭代对象 迭代器生成器_第八章 Python可迭代对象、迭代器和生成器-阿里云开发者社区...
  12. php bing翻译的api,使用PHP和SOAP访问Bing翻译服务
  13. icem合并面网格_ICEM CFD中合并多个网格
  14. HbuilderX中 华为手机 真机调试
  15. 【数字图像处理matlab】RGB转HIS,HIS转RGB
  16. 资本运作下的腾讯和帝国梦想
  17. 计算机分层和tcp分层_认知分层的机械权威与人类权威
  18. Javascript中的shift() 、unshift() 和 pop()、push()区别
  19. 适合前端新手的十大网站
  20. VMware ESXi添加NVMe硬盘扩容

热门文章

  1. X210烧写linux系统
  2. ELF文件和BIN文件
  3. bbb u-boot 验证 emmc
  4. 交叉编译ncurses5.6
  5. wince下获取mac地址的简单方法!
  6. 发一个自己写的2440驱动1602的资料(电路+代码)
  7. em算法 实例 正态分布_EM算法解GMM
  8. 形位公差符号大全_玩转CAD快捷键(大全),一篇文章就够了
  9. php5.4 windows2003,PHP实战:Windows2003下php5.4安装配置教程(IIS)
  10. nubia android root权限,获取中兴NX403a (Nubia Z5S Mini Android 4.2)ROOT权限教程,新手必看...