zoukankan      html  css  js  c++  java
  • 原子类java.util.concurrent.atomic.*原理分析

    原子类java.util.concurrent.atomic.*原理分析

    在并发编程下,原子操作类的应用可以说是无处不在的。为解决线程安全的读写提供了很大的便利。

    原子类保证原子的两个关键的点就是:可见性和写数据一致性。

    对修改可见

    使用volatile来保证读取到最新的数据。
    volatile语义: 用简单的文字来讲,volatile保证了Java共享变量在多线程环境下对读可见的特性。因为它不是Java语言级别的锁,所以不会造成上下文切换,使用恰当的情况下比锁有更好的性能。
    底层原理:
    volatile 是在CPU层面上实现保证了数据的可见性。在写入数据的时候,处理CPU会从系统内存中把数据读到CPU缓存里进行修改,同时回写到系统内存,在这个过程中,其他CPU就不能访问共享内存,直到处理
    CPU完成。写回内存后会导致其他CPU缓存失效,所以所有的CPU看到的都会是新的值。

    写数据一致性

    底层通过使用乐观锁 + CAS的方式进行原子更新。
    CAS: 在原子类这个包下的所有的CAS操作都是使用sun.misc.Unsafe的这个类。在Hotspot虚拟机下这个类内部用JNI方式调用底层实现的。通过CPU指令cmpxchg保证了原子性。

  • 相关阅读:
    封装缓动动画函数
    封装动画函数-匀速运动
    实现产品图片的放大镜效果:
    仿淘宝侧边栏滚动案例:
    页面被卷去的头部兼容性解决方案
    简单发送短信倒计时案例
    Echarts 版本的那些坑
    json变量作键名
    媒体查询那些事儿
    mac 强制关闭指定端口
  • 原文地址:https://www.cnblogs.com/liushijie/p/5925736.html
Copyright © 2011-2022 走看看