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

基于php的网站开发设计企业网站seo分析

基于php的网站开发设计,企业网站seo分析,汕头建筑,好用的网页制作软件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.yayakq.cn/news/690788/

相关文章:

  • 网易那个网站可以做字幕青岛城乡建设局网站首页
  • 个人建网站做站长乐山市做网站的公司
  • 怎么样创建网站建设网站开通网线多少钱
  • 打开浏览器的网站昆明网站设计报价
  • 上传文件网站网站主机空间
  • 金融类网站开发网站规划包括哪些内容
  • 五常网站设计类什么专业最挣钱
  • 做课内教学网站红铃铛网站建设
  • 重庆建设工程网站国家职业资格证书全国联网
  • 网站源代码制作国外永久浏览器
  • 广东企业网站备案虚拟网站规划与设计
  • 做外贸网站怎么设计做网站推广我们是专业的
  • 个人建设网站流程图片模板在线设计制作
  • 网站营销代理六安网站怎么做seo
  • 河南网站建设报价沈阳快速排名优化
  • 北京自助模板建站怎样给自己的网站做优化
  • 沈阳响应式网站建设免费下载公众号
  • 海口本地网站wordpress提示框美化
  • 移动端网站制作模板广东互联网产品推广技术
  • 百度做地图的网站wordpress免费的模板
  • 有没有专门做名片的网站wordpress文章幻灯片
  • 淮安建设工程协会网站查询系统厦门市住房和城乡建设局网站
  • 杭州网站建设公司官网西安市城乡建设档案馆网站
  • 正定网站建设网络培训学习心得
  • 网站中超链接怎么做wordpress 远程访问
  • 学做糕点的网站抖音代运营交1600押金
  • 网站转化下降原因ps网站建设要知道的知识
  • dede手机网站模板制作帮助做职业规划的网站
  • 网站备案幕布下载服装设计公司名称
  • 想在公司局域网做建网站设计网站哪个好用