跳至主要內容

8、Unsafe类

KindBrave小于 1 分钟

Unsafe类顾名思义,它是一个不安全的类,它提供了一些Java中看似没有的特性,比如直接访问内存等等。

一个比较常用的用途就是其中的CAS操作,在Java并发中经常使用

1. CAS

CAS就是比较然后赋值,它一般接收四个参数:

  • 对象
  • 偏移量
  • 期待的旧值
  • 新值

只有当前的值是期待的旧值时,才会把它赋值为新值。

为什么Unsafe的CAS可以保证正确呢?因为这里的CAS使用的是一条CPU命令,可以保证原子性

2. 元反射

这个用途在Android中使用了。我们知道,为了保证Android系统的稳定性,有一些方法是只供系统代码调用的,它们会被标记为@hide。这个方法在新版本的Android系统中,是无法通过反射来获取的。但是Unsafe类可以直接获得偏移量,那么可以通过获得Class类中参数的偏移量来反射这个类中的methods和fields变量等信息,来反射这个类,这个就叫元反射。