AtomicInteger 源码分析
程序员文章站
2022-07-12 19:34:58
...
AtomicInteger 是如何实现原子操作的了?
答案是 CAS(compare and swap)
CAS是 Java Unsafe 类中实现的一些 native 方法,底层代码使用 c/c++ 编写,java 通过 jni 进行调用,在底层芯片级别保证原子操作的进行.
举个例子:假设有两个线程执行 i++ 语句,初始时 i = 0. 那么最终的输出结果可能不为 2. 因为 Java 内存模型的缘故,导致一个线程的修改还没有更新到主存中,另一个线程也进行了修改,最终的结果可能是 1.
答案是 CAS(compare and swap)
CAS是 Java Unsafe 类中实现的一些 native 方法,底层代码使用 c/c++ 编写,java 通过 jni 进行调用,在底层芯片级别保证原子操作的进行.
举个例子:假设有两个线程执行 i++ 语句,初始时 i = 0. 那么最终的输出结果可能不为 2. 因为 Java 内存模型的缘故,导致一个线程的修改还没有更新到主存中,另一个线程也进行了修改,最终的结果可能是 1.
推荐阅读
-
Linux NFS服务器安装与配置思路分析
-
Shell脚本实现分析apache日志中ip所在的地区
-
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
-
一次线上mysql死锁分析
-
GTX1080驱动装不上怎么办 GTX1080驱动装不上的原因分析及快速解决办法
-
爱站seo工具包之日志分析工具怎么用?日志分析工具使用教程(附视频)
-
爱站seo工具包之日志分析工具怎么用?日志分析工具使用教程(附视频)
-
Mybaits 源码解析 (十一)----- 设计模式精妙使用:静态代理和动态代理结合使用:@MapperScan将Mapper接口生成代理注入到Spring
-
IIS日志分析工具使用图文教程(IISLogsViewer)
-
java错误分析之junit测试错误(实验一)