Java并发编程之CAS二源码追根溯源
Java并发编程之CAS二源码追根溯源在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理。本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《CAS系列》教程的第二篇:从源码追根溯源查看CAS最底层是怎么实现的。本文主要内容:CAS追根溯源,彻底找到CAS的根在哪里。一:查看AtomicInteger.comp
Java并发编程之CAS二源码追根溯源
在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理。
本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《CAS系列》教程的第二篇:从源码追根溯源查看CAS最底层是怎么实现的。
本文主要内容:CAS追根溯源,彻底找到CAS的根在哪里。
一:查看AtomicInteger.compareAndSet源码
通过上一篇文章学习,我们知道了AtomicInteger.compareAndSet方法不加锁可以保证原子性(其原理就是unsafe+cas实现的),我们来看看其源码:
思考1:变量可见性
AtomicInteger对象(下文凯哥简称:atoInteger)怎么保证变量内存可见性呢?
查看源码:

思考2:为什么上一篇13行的i.compareAndSet(1,1024)是false
我们来看看atoInteger的compareAndSet方法。凯哥在上面添加了注释。

在调用unsafe的compareAndSwapInt这个方法的时候,unsafe是什么?this指的是什么?valueOffset又是什么呢?
我们接着查看atoInteger源码:

我们发现Unsafe以及valueOffset都是从一个对象中获取到的。
那么this指的是什么?其实this就是当前atoInteger对象。
那么Unsafe对象在哪里呢?



我们想要看源码,怎么查看呢?发现不能看源码啊。别急,这个文件的源码可以从openJdk的源码中查到。
接着,我们来查看OpenJdk8的源码:
(PS:下载OpenJdk8源码凯哥这里就不赘述了。在文章最后,凯哥给出)
下载完,解压之后,文件位置:openjdk\jdk\src\share\classes\sun\misc。如下图
原创不易,完成人机校验,阅读全文