互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒

自旋锁:spinlock,在任何时刻同样只能有一个线程访问对象。但是当获取锁操作失败时,不会进入睡眠,而是会在原地自旋,直到锁被释放。这样节省了线程从睡眠状态到被唤醒期间的消耗,在加锁时间短暂的环境下会极大的提高效率。但如果加锁时间过长,则会非常浪费CPU资源

读写锁:rwlock,区分读和写,处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。

注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写优先于读,当有线程因为等待写锁而进入睡眠时,则后续读者也必须等待

适用于读取数据的频率远远大于写数据的频率的场合。

乐观锁:顾名思义,对每次的数据操作都保持乐观的态度,不担心数据会被修改,所以不会对数据进行上锁。由于数据没有上锁,这就存在数据会被多人读写的情况。所以每次修改数据的时候需要对数据进行判断是否被修改过。在性能方面要比悲观锁好,比较适合用在DB的读大于写的业务场景。

悲观锁:与乐观锁相反,对每次的数据操作都保存悲观的态度,总是担心数据会被修改,所以在自己操作的时候会对数据上锁,防止在自己操作的时候被他人同时操作导致更新丢失。

对于每一次数据修改都要上锁,如果在DB读取需要比较大的情况下有线程在执行数据修改操作会导致读操作全部被挂载起来,等修改线程释放了锁才能读到数据,体验极差。所以比较适合用在DB写大于读的情况。数据库实现方式,使用数据库的读锁、写锁、行锁等实现进程的悬挂阻塞等当前操作完成后才能进行下一个操作。

CSDN

死锁的通俗理解:

通俗易懂理解死锁以及如何避免死锁_greenfloweryue的博客-CSDN博客_如何理解死锁

基本的常见的锁的介绍相关推荐

  1. 常见的锁策略、synchronized中的锁优化机制

    一.常见的锁策略 锁策略,和普通程序猿基本没啥关系,和 "实现锁" 的人才有关系的 这里所提到的锁策略,和 Java 本身没关系,适用于所有和 "锁" 相关的情 ...

  2. JUC学习:java中的各种锁详细介绍

    转自:https://www.cnblogs.com/jyroy/p/11365935.html ,我在网上看到了一篇很好的blog来介绍锁的相关内容,在这记录下来以供后面自己学习 Java提供了种类 ...

  3. Java中的常见的锁及其内存语义

    文章目录 为什么会有锁? JVM内存模型 没有锁会怎么样? happens-before 先行先发生原则 Java中常见的锁 synchronized 内存语义 实现原理 volatile 内存语义 ...

  4. Java中常见的锁简述

    在Java的应用中,或多或少的都会接触到一些锁,那么问题就来了,在Java中,常见的锁有哪些,都有什么样的作用?? 这里给大家简单的简述一下这些学常见的锁. 本文件所涉及到的锁: 1.公平锁 / 非公 ...

  5. java中锁的介绍及运用

    个人免费资源分享网站:http://xiaocaoshare.com/ 1.悲观锁和乐观锁 对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加 ...

  6. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

  7. Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍、使用方法之详细攻略

    Python语言学习之文件格式后缀那些事:python和常见各种文件格式后缀介绍.使用方法之详细攻略 目录 常见各种文件格式后缀介绍 .pyc文件介绍 .py文件介绍 .pxd 文件 .pyd 文件 ...

  8. java B锁_Java中15种锁的介绍

    原标题:Java中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 1.公平锁 / 非公平锁 2.可重入锁 / 不可重入锁 3.独享 ...

  9. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...

  10. Linux--自旋锁(介绍及API简介)

    Linux--自旋锁(介绍及API简介) 1.概念 2.自旋锁的使用 2.1.自旋锁 API 函数 2.2.自旋锁的死锁情况 1. 2. 2.1.解决方式 自旋锁使用注意事项 1.概念 何谓自旋锁?它 ...

最新文章

  1. fetch-pack: unexpected disconnect while reading sideband packet fatal: early EOF fatal: fetch-pack:
  2. 疫情凶险,开学延期:在家中陪孩子,需要注意这3点
  3. POJ 1806 Manhattan 2025
  4. C#字符串中特殊字符的转义
  5. Android ListView与Arrayadapter之间的搭配使用
  6. 【转】OneDrive开发入门
  7. C语言——二分法查找一个数_数组
  8. Apache Rewrite实现URL的跳转和域名跳转
  9. js html 单引号,JS 和 HTML 中的单引号与双引号
  10. Java编程基础阶段笔记 day03 Java基本语法(中)
  11. centos mysql5.5 编译安装_centos6.4下编译安装MySQL-5.5.33
  12. sklearn笔记29 线性回归 天猫双十一销量预测
  13. 微信小程序上传Excel文件并分析上传值数据库
  14. PS入门(1-4) CMYK色彩模式
  15. Java 开发环境搭建
  16. java json去掉反斜杠,如何去掉Json字符串中反斜杠
  17. Python 计算思维训练——字典与字符串练习
  18. UVa 11437 (梅涅劳斯定理) Triangle Fun
  19. 一个游戏大量合服代表什么_浅谈滚服游戏如果实现一键合服
  20. 洛谷ZHC邀请赛---2018年元旦马拉松欢乐赛之《我的一位程序员朋友》

热门文章

  1. linux怎样编写脚本文档,Linux下批处理文件编写
  2. CleanMyMac最新发布的版本是4.10.0
  3. 超级管理器Android,超级文件管理器
  4. 职场上做“独狼”注定失败
  5. 如何在win7下安装XP系统?
  6. 例3.2 计算存款利息
  7. MYSQL 面试常见问题汇总
  8. C++内存空间:静态存储区、栈、堆、文字常量区、程序代码区
  9. CentOS7设置字符集为zh_CN.gbk
  10. 基于时空大数据的GIS技术,推动网格化管理创新发展