reference:https://zhuanlan.zhihu.com/p/115345089
atomic类提供了很多类,这些类针对不同的数据类型进行原子操作
实例
源码分析
底层就是unsafe类的cas操作,而Unsafe底层实际上是调用C代码(native关键字修饰),C代码调用汇编,最后生成出一条CPU指令cmpxchg,完成操作。这也就为啥CAS是原子性的,因为它是一条CPU指令,不会被打断。
Unsafe
既然上面出现了unsafe这里详细了解一下
获取unsafe:
由于其构造方法私有所以无法new
比较早的版本通过反射获取内部已经创建好的theUnsafe:
Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);//设置private为 public
Unsafe unsafe = (Unsafe) f.get(null);
get直接返回unsafe会报错
除了cas还有哪些操作是比较底层的?
Locksupport的park 与unpark在unsafe的底层实现
对内存进行操作,是内存级别的操作,可以自己指定内存地址以及释放,非常底层