乐观锁及乐观锁的实现

本文介绍了在高并发环境下,乐观锁作为解决并发问题的一种策略。首先讲解了高并发带来的挑战,然后阐述了锁的概念,接着重点探讨了乐观锁的原理,并详细说明了乐观锁的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乐观锁

![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9zczEuYmRzdGF0aWMuY29tLzcwY0Z2WFNoX1ExWW54R2twb1dLMUhGNmhoeS9pdC91PTIwMzYwMDMyNiw0MjUwNDE4OTc5JmZtPTI3JmdwPTAuanBn?x-oss-process=image/format,png)

因为热爱,所以拼搏。 –RuiDer


前导必备

  • Java并发锁的含义
  • 悲观锁
  • 数据库

高并发

	高并发简单理解就是在服务器中,成千上完个客户端在同一时间内发
起对服务器端的请求,包括数据的请求,这时服务器后端需要在极短时内处
理客户端的请求并且响应,在互联网平台,追求的是速度和时间,所以,
这就对服务器端有非常大的考验。
	一般客户端发起请求,服务器端接到请求,首先去处理相应的数据,
这就涉及到数据库中的数据操作,或者是缓存中的数据处理,总之要与数据库打交道。
操作数据库数据包括数据的查询,编辑,更新等。

高并发产生的问题

   不同的线程在同一时间对同一数据的读取和更新产生冲突。可能会出现线程A读取
的数据不是最新值,线程B更新的数据覆盖其他线程对该数据的更新。这些问题
都是高并发带来的,即高并发产生的问题。
高并发冲突分类:
	- 数据丢失
	- 脏读

Java提供锁的支持,通俗的理解就是锁对某些数据具有保护作用,防止某一数据在同一时间
被多个线程操作。
锁的分类:
	- 悲观锁:持保守态度,只能由某一个线程持有,其他线程等待持有锁的线程释放锁。性能差
	- 乐观锁:下面讲
	- 其他锁:像自旋锁,轻量级锁等

乐观锁概念

	对于每一个数据或者数据集合,设有一个标识version(字段),
当线程读取数据时,同时会读取出标识版本version的值,进行更
新时,首先比较当前数据库字段version的值是否与读取出的
version值相等,如果相等,则更新值,否则,作为过期值丢弃。

乐观锁的实现

实现一:
		比如一个数据库表的结构是
		id value version三个字段
		当进行数据的更新时,首先读取:
		select value version from table where id=x;
		其次更新:
			update table set value=newValue, version=oldVersion+1 where id=x and version=oldVersion;

实现二:
	cas算法:Compare And Swap算法,即有三个值,内存值,预期旧值,新值,
比较内存值是否与当前预期值相等,如果相等,则替换新值,否则,不做任何处理。

about me

我的博客

我的github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值