Java中的锁之乐观锁与悲观锁

本文深入探讨了并发控制中乐观锁与悲观锁的概念,解释了两者的不同应用场景及其实现方式,包括synchronized关键字、lock实现类、CAS算法等,并分析了循环时间长、ABA问题等潜在挑战。

1、 分类一:乐观锁与悲观锁

  a)悲观锁:认为其他线程会干扰本身线程操作,所以加锁

                    i.具体表现形式:synchronized关键字和lock实现类

  b)乐观锁:认为没有其他线程会影响本身线程操作,所以不加锁

                    i.具体表现形式:java的原子类的递增操作

                   ii.原理:采用cas算法

  c)Cas算法:交换与比较

                    i.涉及三个数:需要读写的内存值V,进行比较的值A,要写入的新值B

                   ii.具体操作:若A=V,就用B更新V,否则不进行任何操作

                  iii.会用ABA问题:cas算法需要判断内存值V是否发生变化,如果a值变成b值然后又变回a值,cas算法就会无法判断,产生错误。解决上问题:在变量前添加版本号,将aba变成1a2b3c

                  iv.循环时间长开销大,因为自旋需要消耗cpu

                   v.只能保证一个共享变量的原子操作

2、 分类二

  a) 重入锁:支持重进入的锁,排它锁

3、 分类三

  a)读写锁:一对锁,读锁,写锁,在同一时刻允许多线程访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值