原子类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保证了原子性。

最新文章

  1. 获取 IP 地址
  2. iOS模拟器多个虚拟机怎么处理
  3. 291. Word Pattern II
  4. 第一篇:数据工程师眼中的智能电网(Smart Grid)
  5. POJ 2409 Let it Bead 组合数学
  6. HDU2629:Identity Card
  7. “宇宙最强” IDE,Visual Studio 2019 正式发布
  8. lambda 怎么传递ref参数
  9. Idea中运行项目时出现:未结束的字符串解决方案
  10. Linux和windows之间使用scp无密码传输文件,脚本自动化
  11. hashlib 和loggin模块
  12. redis 配置文件redis.conf
  13. c语言数组的赋值问题
  14. UVALive 6662 TheLastAnt
  15. VC6完整项目代码升级到VS2010
  16. ci框架简单出现的错误[Undefined property: MContacts::$db]
  17. 数据结构之DFS与BFS
  18. JSON.parse 的用法,在js中用的。也是反序列化用法。
  19. Windows环境下完全手工配置Apache、MySQL和PHP
  20. python剑指网络篇二

热门文章

  1. Unity需要频繁登录是什么情况
  2. 一个virtualbox开机即aborted的问题解决
  3. PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!
  4. git --help出来的命令 + eclipse里用git小记
  5. 【swift学习笔记】四.swift使用Alamofire和swiftyJson
  6. ElasticSearch第三步-中文分词
  7. 委托,匿名函数和lambda表达式
  8. ceph hadoop spark 大数据处理
  9. echarts-在现实标题中显示百分比
  10. DBoW2库介绍