锁分类

作者: hehehehe | 来源:发表于2020-06-14 10:47 被阅读0次
是否锁住资源分为悲观锁(互斥同步锁)和乐观锁

悲观锁 典型的就是synchronize锁和Lock锁
互斥同步锁, 阻塞和唤醒带来的性能劣势,死锁导致的永久阻塞
乐观锁 不会锁住被操作的对象,他在修改期间会检测是否别人修改过数据,如果别人修改过,自己就不能继续修改了,可以选择放弃,报错,重试等
乐观锁一般使用cas算法来实现
使用场景
悲观锁 适合于并发写入较多的情况下,适用于临界区持锁时间比较长的情况,悲观锁可以减少大量无用自旋消耗
1、临界区有io操作
2、临界区代码复杂或者循环量比较大
3、临界区竞争非常激烈
乐观锁 适合并发写比较少,大部分是读的场景,不加锁能够让读的操作大幅提高

多个线程是否可以共享一把锁分为共享锁和独占锁
多个线程竞争锁是否需要排队分为公平锁和非公平锁
同一个线程是否可以重复获取同一把锁分为可重入锁和非重入锁

可重入性可以避免死锁
可重入锁也叫递归锁,它俩等同于一回事,指的是同一线程外层函数获得锁之后,内层递归函数仍然能获得该锁的代码,同一线程在外层方法获取锁的时候,再进入内层方法会自动获取锁。也就是说,线程可以进入任何一个它已经拥有的锁所同步着的代码块。ReentrantLock 和 synchronized 就是典型的可重入锁!

是否可以被中断分为可中断锁和非可中断锁
等待锁的过程中是否自动重试分为自旋和非自旋

相关文章

  • Java锁的分类 以及应用

    Java锁的分类 序号分类应用1乐观锁/悲观锁乐观锁: CAS(Compare and Swap 比较并且替换)、...

  • Mysql中的锁

    锁的类型有哪些 基于锁的属性分类:共享锁、排他锁。 基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB...

  • CAS 与原子操作

    乐观锁与悲观锁 锁可以从不同的角度分类。其中,乐观锁和悲观锁是一种分类方式。 乐观锁:乐观锁又称为“无锁”。乐观锁...

  • MySQL的锁

    1.职责分类 共享锁 - 读锁独占锁(排它锁) - 写锁 2.粒度分类 1.行级锁2.表级锁注意:在mysql中只...

  • 史上最全 Java 中各种锁的介绍

    锁的分类介绍 乐观锁与悲观锁 锁的一种宏观分类是乐观锁与悲观锁。乐观锁与悲观锁并不是特定的指哪个锁(Java 中也...

  • 史上最全 Java 中各种锁的介绍

    锁的分类介绍 乐观锁与悲观锁 锁的一种宏观分类是乐观锁与悲观锁。乐观锁与悲观锁并不是特定的指哪个锁(Java 中也...

  • 锁分类

    是否锁住资源分为悲观锁(互斥同步锁)和乐观锁 悲观锁 典型的就是synchronize锁和Lock锁互斥同步锁, ...

  • (5)锁机制与InnoDB锁算法

    一 锁分类(按照锁的粒度分类) Mysql为了解决并发、数据安全的问题,使用了锁机制。 可以按照锁的粒度把数据库锁...

  • Java中的锁分类

    Java中的锁分类 在读良多并发文章中,会说起各类各样锁如公允锁,乐不雅观不雅观锁等等,这篇文章引见各类锁的分类。...

  • 我认识的MySQL

    数据库概念 锁分类 锁(按照锁粒度分类) 表级锁:每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发...

网友评论

      本文标题:锁分类

      本文链接:https://www.haomeiwen.com/subject/cskxxktx.html