17.原子变量 CAS算法
来源:互联网 发布:软件的版权声明 编辑:程序博客网 时间:2024/05/16 18:37
案例引入:
public class TestAtomicDemo {public static void main(String[] args) {AutomicDemo ad = new AutomicDemo();for(int i = 0; i<10;i++){new Thread(ad).start();}}}class AutomicDemo implements Runnable{private int serialNumber = 0;public void run() {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getSerialNumber());}public int getSerialNumber() {return serialNumber++;}}运行结果:
0432105678原因分析:
引入主体
一、CAS算法
①CAS(Compare - And -- Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器的一种特殊指令,用于管理共享数据的并发访问。
②CAS是一种无锁的非阻塞算法的实现
③CAS包含3个操作数:需要读写的内存值V;进行比较的值A;拟写入的新值B
④当且仅当V的值等于A时,CAS通过原子方式用新值B来更新V的值,否则不会执行任何操作。
二、原子变量
①类的小工具包,支持在单个变量上解除锁的线程安全编程。事实上,此包中的类可将volatile值、字段和数组的概念扩展到那些也提供原子条件更新操作的类。
②类AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference的实例各自提供对相应类型的单个变量的访问和更新。每个类也为该类型提供适当的实用工具方法
③AtomicIntegerArray、AtomicLongArray和AtomicReferenceArray类进一步扩展了原子操作,对这些类型的数组提供了支持。这些类在为其数组元素提供volatile访问语义方面也引人注目,这对于普通数组来说是不受支持的。
④核心方法:boolean compareAndSet(expectedValue,updateValue)
⑤java.util.concurrent.atomic包下提供了一些原子性操作的常用类:
AtomicBoolean、AtomicInteger、AtomicLong和AtomicReference、AtomicIntegerArray、AtomicLongArray和AtomicReferenceArray、AtomicMarkableReference、AtomicStampedReference
import java.util.concurrent.atomic.AtomicInteger;public class TestAtomicDemo {public static void main(String[] args) {AutomicDemo ad = new AutomicDemo();for(int i = 0; i<10;i++){new Thread(ad).start();}}}class AutomicDemo implements Runnable{//private int serialNumber = 0;private AtomicInteger at = new AtomicInteger();public void run() {try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(getSerialNumber());}public int getSerialNumber() {//return serialNumber++;return at.incrementAndGet();}}
注意:
原子性问题分为三步:读 -- 写 -- 改
- 17.原子变量 CAS算法
- 原子变量&&CAS算法
- 原子变量CAS算法
- 原子变量和CAS算法
- 原子变量与CAS算法小结
- 原子变量和CAS算法简单介绍
- 多线程之原子变量CAS算法(二)
- 多线程之原子变量CAS算法(二)
- 原子变量 和cas 原理
- 免锁算法----原子变量
- java并发中的原子变量和原子操作以及CAS介绍
- java中CAS算法保证原子性 无锁编程
- java——保证原子性操作的CAS算法
- 原子变量
- 原子变量
- Intel处理器CAS原子指令
- memcache CAS实现原子操作
- java并发编程4:原子变量与非阻塞算法
- 下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。
- 只属于你我的共同记忆
- 数据结构——图——知识点总结
- docker 进入容器
- ACM 计算几何知识点总结
- 17.原子变量 CAS算法
- myeclipse优化
- easy_install安装python的MySQLdb模块
- oracle基础二
- caffe:如何保存训练日志?
- ssh框架整合时的一点异常总结
- 安卓逆向系列教程 4.9 破解内购 II
- 关于java中的File.seperator
- 一文看懂机械键盘,从小白到行(ru)家(shou)