快速业务通道

Java理论与实践: 流行的原子 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
CAS 操作的行为(而不是性能特征), 但是 CAS 的价值是它可以在硬件中实现,并且是极轻量级的(在大多数处理器 中):

清单 3. 说明比较并交换的行为(而不是性能)的代码

public class SimulatedCAS {    private int value;    public synchronized int getValue() { return value; }    public synchronized int compareAndSwap(int expectedValue, int newValue) {      if (value == expectedValue)        value = newValue;      return value;    } }

使用 CAS 实现计数器

基于 CAS 的并发算法称为 无锁定算法,因为线程不必再等待锁定(有时称 为互斥或关键部分,这取决于线程平台的术语)。无论 CAS 操作成功还是失败 ,在任何一种情况中,它都在可预知的时间内完成。如果 CAS 失败,调用者可 以重试 CAS 操作或采取其他适合的操作。清单 4 显示了重新编写的计数器类来 使用 CAS 替代锁定:

清单 4. 使用比较并交换实现计数器

public class CasCounter {    private SimulatedCAS value;    public int getValue() {      return value.getValue();    }    public int increment() {      int oldValue = value.getValue();      while (value.compareAndSwap(oldValue, oldValue + 1) != oldValue)        oldValue = value.getValue();      return oldValue + 1;    } }

Java理论与实践: 流行的原子(3)

时间:2010-12-22 IBM Brian Goetz

无锁定且无等待算法

如果每个线程在其他线程任意延迟(或甚至失败)时都将持续进行操作,就 可以说该算法是 无等待的。与此形成对比的是, 无锁定算法要求仅 某个线程 总是执行操作。(无等待的另一种定义是保证每个线程在其有限的步骤中正确计 算自己的操作,而不管其他线程的操作、计时、交叉或速度。这一限制可以是系 统中线程数的函数;例如,如果有 10 个线程,每个线程都执行一次 CasCounter.increment() 操作,最坏的情况下,每个线程将必须重试最多九次 ,才能完成增加。)

再过去的 15 年里,人们已经对无等待且无锁定算法(也称为 无阻塞算法) 进行了大量研究,许多人通用数据结构已经发现了无阻塞算法。无阻塞算法被广 泛用于操作系统和 JVM 级别,进行诸如线程和进程调度等任务。虽然它们的实 现比较复杂,但相对于基于锁定的备选算法,它们有许多优点:可以避免优先级 倒置和死锁等危险,竞争比较便宜,协调发生在更细的粒度级别,允许更高程度 的并行机制等等。

原子变量类

在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待、 无锁定的算法。在 java.util.concurrent.atomic 包中添加原子变量类之后, 这种情况才发生了改变。所有原子变量类都公开比较并设置原语(与比较并交换 类似),这些原语都是使用平台上可用的最快本机结构(比较并交换、加载链接 /条件存储,最坏的情况下是旋转锁)来实现的。java.util.concurrent.atomic 包中提供了原子变量的 9 种风格( AtomicInteger; AtomicLong; AtomicReference; AtomicBoolean;原子整型;长型;引用;及原子标记引用 和戳记引用类的数组形式,其原子地更新一对值)。

原子变量类可以认为是 volatile 变量的泛化,它扩展了可变变量的概念, 来支持原子条件的比较并设置更新。读取和写入原子变量与读取和写入对可变变 量的访问具有相同的存取语义。

虽然原子变量类表面看起来与清单 1 中的 SynchronizedCounter 例子一样 ,但相似仅是表面的。在表面之下,原子变量的操作会变为平台提供的用于并发 访问的硬件原语,比如比较并交换。

更细粒度意味着更轻量级

调整具有竞争的并发应用程序的可伸缩性的通用技术是

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号