悲观锁和乐观锁的应用场景(悲观锁与乐观锁的现实用法)

来源:网络技术联盟站 

链接: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 悲观锁和乐观锁的使用场景

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

三、总结

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

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


悲观锁和乐观锁的应用场景(悲观锁与乐观锁的现实用法)

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/34866.html

Like (0)
网络技术联盟站的头像网络技术联盟站
Previous 2024年4月11日
Next 2024年4月11日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注