8、Unsafe类
小于 1 分钟
Unsafe类顾名思义,它是一个不安全的类,它提供了一些Java中看似没有的特性,比如直接访问内存等等。
一个比较常用的用途就是其中的CAS操作,在Java并发中经常使用
1. CAS
CAS就是比较然后赋值,它一般接收四个参数:
- 对象
- 偏移量
- 期待的旧值
- 新值
只有当前的值是期待的旧值时,才会把它赋值为新值。
为什么Unsafe的CAS可以保证正确呢?因为这里的CAS使用的是一条CPU命令,可以保证原子性
2. 元反射
这个用途在Android中使用了。我们知道,为了保证Android系统的稳定性,有一些方法是只供系统代码调用的,它们会被标记为@hide。这个方法在新版本的Android系统中,是无法通过反射来获取的。但是Unsafe类可以直接获得偏移量,那么可以通过获得Class类中参数的偏移量来反射这个类中的methods和fields变量等信息,来反射这个类,这个就叫元反射。