高并发程序设计之无锁

就人而言,分为被悲观派和乐观派;对于乐天派而言,总是把事情往好的方面想。他们认为所有的事情总是不太容易发生的,出错的几率很小。对于悲观派,他们总是担心意外的发生,所以他们把所有的事情都想的很中哦,确保万无一失。

对于并发控制而言,也可以分为悲观锁和乐观锁;我们平时所说的synchronized和ReentrantLock锁都属于悲观锁了;而乐观锁我们往往是通过CAS(Compare And Swap比较并交换)来实现的。

  1. 与锁相比,使用比较交换会使程序更加的复杂化,但由于其是非阻塞的,不会出现死锁的情况,拥有更优越的性能。
  2. 其过程如下:它包含三个参数(V、E、N)。V表示要更新的值,E表示预期的值,N表示新值。仅当V==E时,才会将V的值设为N,如果两者不相等,说明已经被修改过,则当前线程什么都不做。

虽然CAS可以解决一些问题,但是当CAS发生ABA问题时,我们有时候也很头疼的,(修改过之后又修改为原值)。

那么此时我们可以用带有时间戳的对象引用:AtomicStampedReference,AtomicReference无法解决ABA问题,是因为丢失了状态信息;

public AtomicStampedReference(V initialRef, int initialStamp) ;

AtomicStampedReference除了会对比V==E之外,还会对比时间戳,只有都相等才会更改为新值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值