什么是悲观锁,什么是乐观锁呢?

乔欣 Java面经 发布时间:2022-11-12 22:24:24 阅读数:19662 1 并发编程面试题(2023最新版)
下文笔者讲述悲观锁和乐观锁的简介说明,如下所示

悲观锁简介

当你每次获取数据时,认为被人会修改,
 所以每次获取数据时,都会对数据加锁,我们将这种加锁机制称之为“悲观锁”

其实就是一种悲观主义的信念,我们将这种事先加锁的方式,称之为“悲观锁”

乐观锁

当你每次获取数据时,认为不会被人修改,
 所以每次获取数据时,都不会对数据加锁
  但是修改数据时,通过版本号的方式验证,是否有人对数据进行了更新
 ,我们将这种不加锁和使用版本控制的机制称之为“乐观锁”

其实就是一种乐观主义的信念,我们将这种事不加锁的方式,称之为“乐观锁”

悲观锁的实现方式

使用synchronized关键字的方式
  即可实现悲观锁

乐观锁的实现方式

1.版本号机制
    在数据表中加上一个版本号version字段
      标记数据被修改的次数
     当数据被修改时,version值会加一
     当线程A要更新数据值时,在读取数据的同时也会读取version值
     在提交更新时,当刚才读到的version值与当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

2.CAS算法:
    当多个线程尝试使用CAS同时更新同一个变量时
     只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起
     而被告知这次竞争中失败,并可以再次尝试
     
	 CAS操作包含三个操作数:内存位置(V)、预期原值(A)和新值(B)
       当内存地址里面的值V和预期原值A值是一样的,
	   那么就将内存里面的值V更新成新值B
	 CAS是通过无限循环来获取数据
	 当在第一轮循环中,a 线程获取地址里面的值被 b 线程修改,则a线程需要自旋,到下次循环才有可能机会运行
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16682631314883.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者