学习非阻塞的同步机制CAS 现代的处理器都包含对并发的支持,其中最通用的方法就是比较并交换(compare and swap),简称CAS。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论V值是否等于A值,都将返回V的原值。 CAS 有效地说明了:我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。当多个线程尝试使用CAS同时更新一个变量,最终只有一个线程会成功,其他线程都会失败。但和使用锁不同,失败的线程不会被阻塞,而是被告之本次更新操作失败了,可以再试一次。 使用CAS的优点在于,它可以减少因为阻塞而损失的性能。CAS是一种乐观的操作,它希望每次都能成功地执行更新操作。CAS操作可以在多线程并发环境下,提供高效的同步机制。 在 Java 中,我们可以使用AtomicInteger这种原子类来实现CAS操作。Atom原子类JVM是支持CAS的,体现在我们常用的Atom原子类,拿AtomicInteger分析一下源码。public final int getAndIncrement() {for (;;) {int current = get();int next = current + 1;if (compareAndSet(current, next))return current;}}对AtomicInteger进行+1操作,循环里,会将当前值和+1后的目标值传入compareAndSet,直到成功才跳出方法。 compareAndSet是不是很熟悉呢,接着来看看它的代码。// setup to use Unsafe.compareAndSwapInt for updatesprivate static final Unsafe unsafe = Unsafe.getUnsafe();public final boolean compareAndSet(int expect, int update) {return unsafe.compareAndSwapInt(this, valueOffset, expect, update);}compareAndSet调用了unsafe.compareAndSwapInt,这是一个native方法,原理就是调用硬件支持的CAS方法。 CAS是一种高效的同步机制,它可以减少因为阻塞而损失的性能,提高多线程并发环境下的性能。但是,CAS操作需要自己实现重试回退放弃等操作,开发起来远比使用锁复杂。
































- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- javaJME技术的数独手机游戏的设计方案与实现.doc
- Partnering项目管理模式探析.docx
- 计算机信息系统集成资质认证申报资料汇总.doc
- 信息化管理目标及措施.docx
- 人工智能:未来社会钥匙.docx
- 网络自主和互动学习模式与高校英美文学课程的教学.docx
- 基于多目标优化算法的交叉路口信号灯配时模型研究.docx
- 无线数据采集系统技术指标及应用.doc
- 计算机应用软件开发过程中不同编程语言的影响研究.docx
- 通信工程概预算测验考试测验考试与答案(题与专业题).doc
- 单片机毕业设计方案单片机设计方案的红外线遥控器.doc
- 新代系统DOS-FTP联网应用.docx
- 基于OPNET的NTDR网络建模与仿真研究.docx
- DINP 中的 Agent 部署于所有计算节点并收集节点运行时数据
- 软件项目验收标准.docx
- 子帆学校心理评估系统网络版培训手册.doc


