Java并发编程实战 - 第15章 原子变量与非阻塞同步机制

原子变量与非阻塞同步机制

并发非阻塞算法
用底层的原子机器指令(如比较并交换指令CAS)代替锁保证数据在并发访问下的一致性。

锁的劣势
锁是独占式访问,挂起和恢复线程的开销很大,而且容易出现死锁等活跃性问题。
尤其对那些细粒度的操作(如递增计数器),加锁的方式开销很大。

利用现代处理器提供的原子操作指令(如CAS) 处理细粒度的操作,效率更高。

锁是一种悲观技术;CAS 是一种乐观技术。
CAS: 比较并交换, 包含三个操作,读取内存位置V,进行比较的值A, 和拟写入的新值B。仅当V的位置的值是A是,更新为B,无论是否为A,总是返回旧值。

原子变量类
JVM 原子变量类实现了底层的CAS, 直接利用硬件对并发的支持。
最常用的原子变量类有:
AtomicInteger
AtomicLong
AtomicBoolean
AtomicReference
原子变量类是可以修改的, 没有重新定义hashCode 和 equals方法,每个实例都是不同的(可变对象),不宜做基于散列的容器的键值。

锁与原子变量的性能比较
在中低程度的竞争下,原子变量提供更高的可伸缩性;
在高强度的竞争下,锁能更有效地避免竞争。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值