谈谈Java中的锁机制(悲观锁和乐观锁)

在这里插入图片描述
图片引用自:GitChat

线程是否需要对资源加锁分为两类
悲观锁

悲观锁是一种消极的思想,它总是认为会有最坏的情况出现,它总是认为数据是会被修改的,所以它会在持有资源的时候把资源和数据锁住。这样其他的线程要请求这个资源的时候就会被阻塞,直到悲观锁把资源释放了。悲观锁有许多的应用场景,最常见的就是我们经常使用的的传统关系型数据库的锁机制。比如行锁,表锁,读锁,写锁这些都是在要资源操作之前加锁。悲观锁的实现往往依靠数据库自身实现的。悲观锁适用于读少写多的场景

Java中Synchronized和ReetrantLock等独占锁都是悲观锁思想的实现。

乐观锁

乐观锁体现的是悲观锁的反面。它是一种积极的思想,它总是认为数据是不会被修改的,所以是不会对数据上锁的。但是乐观锁在更新的时候会去判断数据是否被更新过。乐观锁的实现方案一般有两种(版本号机制和CAS)。乐观锁适用于读多写少的场景,这样可以提高系统的并发量。在Java中 java.util.concurrent.atomic下的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

乐观锁实现的两种方式

乐观锁一般会

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值