Java并发编程实战

来源:互联网 发布:黑魂2日系妹捏脸数据 编辑:程序博客网 时间:2024/05/21 23:00

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

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

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

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

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

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

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

0 0