首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java中的悲观锁和乐观锁是什么意思?其分类依据是啥?

Java中的悲观锁和乐观锁是什么意思?其分类依据是啥?

作者头像
网络技术联盟站
发布2023-03-02 12:14:07
发布2023-03-02 12:14:07
8240
举报

来源:网络技术联盟站 链接:https://www.wljslmz.cn/19667.html

相信很多Java开发的朋友都会被java中的各种锁所迷惑,你是不是经常听到“可重入锁”、“互斥锁”、“轻量级锁”等关键词,其实Java中的锁的分类很多,不过这种分类都是针对场景的,好多人分不清或者记不住,是因为不知道这些锁为啥是这样的分类,本文瑞哥就用简洁的语言带大家走入Java中的锁,让我们直接开始!

一、锁的分类

Java中的锁都是根据其特性进行分类的,我这边先给出分类的思维导图,然后我会一一讲解:

如图所示,我将锁分成了6类,那么每种分类的依据是什么?请往下看。

二、悲观锁 vs 乐观锁

2.1 悲观锁

悲观锁,“悲观”一词就解释了一切,我们在生活中常常回说“XX太悲观”,那么悲观的人心思都很重,很多时候如果事情不能100%成功,那么他都不会去尝试,做事前首先想到的就是事情假如失败了怎么办。

在java中,悲观锁也很像生活中悲观的人,悲观锁是这样的,假如有多个线程去访问同一个资源,当第一个线程访问的时候,因为是悲观锁,所以太怕出意外情况,因此系统会直接锁住这个资源,直到第一个线程释放锁,这就是悲观锁。

悲观锁提供了更好的数据完整性,但是锁的管理更难,如果您无法管理它,您的应用程序可能会遇到死锁

2.2 乐观锁

乐观锁,字面意思“乐观”,想象一下生活中那些乐观的人,他们总是将事情想的很顺利,对什么事情都是往好的方向想,一般都是这样:管他呢,啥后果不后果的,万一成功了呢,先干再说。

在java中,乐观锁也很像生活中乐观的人,乐观锁是这样的,多个线程访问某个资源的时候,当第一个线程访问该资源的时候,它认为不会有其他线程(不考虑其他事情,认为什么都是好的)修改该资源,所以不会加锁,但是不加锁不代表没有任何操作,它会先判断一下这个资源有没有被其他线程修改过,如果没有修改,那么它就不管不顾的操作该资源,如果判断出被修改过,那么会执行其他操作,这个根据情况来看,一般就是重试或者直接抛出错误。

在大多数情况下,乐观锁定更有效并提供更高的性能

2.3 分类依据

看完我上面对悲观锁和乐观锁的描述,你是不是已经直到分类的依据了呢?

不错,就是线程间是否需要锁住资源:需要锁住就是悲观锁,不需要锁住就是乐观锁。

2.4 悲观锁和乐观锁的使用场景

  • 如果有大量更新并且用户尝试同时更新数据的机会相对较高,则悲观锁定很有用。
  • 如果发生冲突的可能性非常低,乐观锁定很有用。

三、总结

本文主要介绍了悲观锁和乐观锁,其分类的依据就是线程间是否需要锁住资源,需要锁住就是悲观锁,不需要锁住就是乐观锁。

希望本文对您认识悲观锁和乐观锁有所帮助,在阅读的同时有任何疑问可以在下方评论区与我讨论,下一篇文章,将带您了解一下自旋锁和应性自旋锁。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、锁的分类
  • 二、悲观锁 vs 乐观锁
    • 2.1 悲观锁
    • 2.2 乐观锁
    • 2.3 分类依据
    • 2.4 悲观锁和乐观锁的使用场景
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档