当前位置: 首页 > news >正文

做网站需准备些什么外链网盘下载

做网站需准备些什么,外链网盘下载,保险网站建设优缺点,日ip 1万 网站 值多少钱AtomicInteger原理 4.6.1 原理介绍 AtomicInteger的本质:自旋锁 CAS算法 CAS的全成是: Compare And Swap(比较再交换); 是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS可以将read-modify-write转换为原子操作,这…

AtomicInteger原理

4.6.1 原理介绍

AtomicInteger的本质:自旋锁 + CAS算法

CAS的全成是: Compare And Swap(比较再交换); 是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS可以将read-modify-write转换为原子操作,这个原子操作

直接由处理器保证。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当旧预期值A和内存值V相同时,将内存值V修改为B并返回true,否则什么都不做,并返回false。

举例说明:

  1. 在内存值V当中,存储着值为10的变量。
    在这里插入图片描述

  2. 此时线程1想要把变量的值增加1。对线程1来说,旧的预期值 A = 10 ,要修改的新值 B = 11。

在这里插入图片描述

  1. 在线程1要提交更新之前,另一个线程2抢先一步,把内存值V中的变量值率先更新成了11。
    在这里插入图片描述

  2. 线程1开始提交更新,首先进行A和内存值V的实际值比较(Compare),发现A不等于V的值,提交失败。
    在这里插入图片描述

  3. 线程1重新获取内存值V作为当前A的值,并重新计算想要修改的新值。此时对线程1来说,A = 11,B = 12。这个重新尝试的过程被称为自旋
    在这里插入图片描述

  4. 这一次比较幸运,没有其他线程改变V的值。线程1进行Compare,发现A和V的值是相等的。
    在这里插入图片描述

  5. 线程1进行SWAP,把内存V的值替换为B,也就是12。

在这里插入图片描述

举例说明:这好比春节的时候抢火车票,下手快的会抢先买到票,而下手慢的可以再次尝试,直到买到票。

4.6.2 源码分析

那么接下来我们就来查看一下AtomicInteger类中incrementAndGet方法的源码。

public class AtomicInteger extends Number implements java.io.Serializable {// cas算法的实现类private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe();// 表示变量值在内存中的偏移量地址,unsafe类就是根据内存偏移量地址获取数据值。private static final long VALUE = U.objectFieldOffset(AtomicInteger.class, "value");private volatile int value;// 以原子方式将当前值加1,这里返回的是自增后的值public final int incrementAndGet() {/* this表示当前AtomicInteger对象 ,1表示要增加的值 */return U.getAndAddInt(this, VALUE, 1) + 1;		// 调用Unsafe类中的getAndAddInt方法}}

UnSafe类

public final class Unsafe {// Unsafe类中的getAndAddInt方法public final int getAndAddInt(Object o, long offset, int delta) {int v;// do...while就是自旋操作,当CAS成功以后,循环结束do {// 获取AtomicInteger类中所封装的int类型的值,就相当于旧的预期值Av = getIntVolatile(o, offset); // 调用本类的weakCompareAndSetInt方法实现比较在交换; o: AtomicInteger对象, v: 相当于旧的预期值A, v + delta:新值B} while (!weakCompareAndSetInt(o, offset, v, v + delta));return v;}// Unsafe类中的weakCompareAndSetInt方法public final boolean weakCompareAndSetInt(Object o, long offset, int expected, int x) {return compareAndSetInt(o, offset, expected, x);}// 本地方法,调用CPU指令实现CASpublic final native boolean compareAndSetInt(Object o, long offset, int expected, int x);}

4.7 CAS与Synchronized

CAS和Synchronized都可以保证多线程环境下共享数据的安全性。那么他们两者有什么区别?

Synchronized是从悲观的角度出发:

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线

程阻塞,用完后再把资源转让给其它线程)。因此Synchronized我们也将其称之为悲观锁。jdk中的ReentrantLock也是一种悲观锁。

CAS是从乐观的角度出发:

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。CAS这种机制我们也可以将其称之为乐观锁。

http://www.hrbkazy.com/news/31992.html

相关文章:

  • 网站建设的总结100字网游推广
  • 网站前台的实现178软文网
  • 网络工程专业学什么宁波核心关键词seo收费
  • 美国网站建设公司哪家好大型seo公司
  • tp5.1做的网站西安百度搜索排名
  • 凡科网站产品导航怎么做网站首页不收录
  • php+mysql网站开发...营销云
  • 建设银行绑定手机号码网站今日新闻快讯
  • 网站建设教程软件下载网站备案查询官网
  • 网站的ftp帐号steam交易链接怎么看
  • 政协网站建设申请函各网站收录
  • 江苏连云港网站设计公司企业营销推广方案
  • 时时彩网站开发需要多少钱360网站关键词排名优化
  • 外贸网页设计公司优化网站怎么真实点击
  • 网站建设和网站开发百度网站分析
  • 网站推广营销怎么做郴州网站seo外包
  • 做分享衣服网站的初衷是什么意思销售外包
  • 中山做网站做的好的公司免费网站建站页面
  • 网站制作素材活动推广方案策划
  • 做网站功能国际军事新闻最新消息视频
  • vue.js做的网站百度推广外包哪家不错
  • 做网站py和php系列推广软文范例
  • wordpress seo 主题台州关键词优化推荐
  • 自己做网站可以盗图吗搜索推广渠道有哪些
  • 建筑行业网成都网站seo收费标准
  • 网站开发项目答辩视频网站seo完整seo优化方案
  • 微信公众号优惠和网站绑定怎么做网站建设方案推广
  • 做的比较好的网站全网seo是什么意思
  • 杭州网络营销网站2023年免费b站推广大全
  • 西宁的网站建设公司2022年新闻摘抄十条简短