首页 / 算法 / JUC基础(二):原子变量 CAS算法
JUC基础(二):原子变量 CAS算法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JUC基础(二):原子变量 CAS算法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2614字,纯文字阅读大概需要4分钟。
内容图文
1 CAS 算法
2 原子变量
package com.atguigu.juc; import java.util.concurrent.atomic.AtomicInteger; /* * 一、i++ 的原子性问题:i++ 的操作实际上分为三个步骤“读-改-写” * int i = 10; * i = i++; //10 * * int temp = i; * i = i + 1; * i = temp; * * 二、原子变量:在 java.util.concurrent.atomic 包下提供了一些原子变量。 * 1. volatile 保证内存可见性 * 2. CAS(Compare-And-Swap) 算法保证数据变量的原子性 * CAS 算法是硬件对于并发操作的支持 * CAS 包含了三个操作数: * ①内存值 V * ②预估值 A * ③更新值 B * 当且仅当 V == A 时, V = B; 否则,不会执行任何操作。 */ public class TestAtomicDemo { public static void main(String[] args) { AtomicDemo ad = new AtomicDemo(); for (int i = 0; i < 10; i++) { new Thread(ad).start(); } } } class AtomicDemo implements Runnable{ // private volatile int serialNumber = 0;private AtomicInteger serialNumber = new AtomicInteger(0); @Override publicvoid run() { try { Thread.sleep(200); } catch (InterruptedException e) { } System.out.println(getSerialNumber()); } publicint getSerialNumber(){ return serialNumber.getAndIncrement(); } }
package com.atguigu.juc; /* * 模拟 CAS 算法 */ public class TestCompareAndSwap { public static void main(String[] args) { final CompareAndSwap cas = new CompareAndSwap(); for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override publicvoid run() { int expectedValue = cas.get(); boolean b = cas.compareAndSet(expectedValue, (int)(Math.random() * 101)); System.out.println(b); } }).start(); } } } class CompareAndSwap{ privateint value; //获取内存值publicsynchronizedint get(){ return value; } //比较publicsynchronizedint compareAndSwap(int expectedValue, int newValue){ int oldValue = value; if(oldValue == expectedValue){ this.value = newValue; } return oldValue; } //设置publicsynchronizedboolean compareAndSet(int expectedValue, int newValue){ return expectedValue == compareAndSwap(expectedValue, newValue); } }
原文:https://www.cnblogs.com/qiu-hua/p/14238194.html
内容总结
以上是互联网集市为您收集整理的JUC基础(二):原子变量 CAS算法全部内容,希望文章能够帮你解决JUC基础(二):原子变量 CAS算法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。