####1.unsafe类的使用
unsafe类一般作为一个静态变量存储在一个类里面,他可以类中某个属性的内存偏移地址,需要修改属性是传入类对应对象的实例,从而修改指定对象实例的属性值
1.操纵对象属性
public native long objectFieldOffset(Field f);
通过此方法,可以获取类中某个属性的内存偏移地址,然后可根据偏移地址直接对对象的属性进行修改,属性是否可读都无所谓,都能修改。
2.操作数组元素
public native int arrayBaseOffset(Class arrayClass);
public native int arrayIndexScale(Class arrayClass);
3.线程挂起与恢复
将一个线程进行挂起是通过park方法实现的,调用 park后,线程将一直阻塞直到超时或者中断等条件出现。unpark可以终止一个挂起的线程,使其恢复正常。整个并发框架中对线程的挂起操作被封装在 LockSupport类中,LockSupport类中有各种版本pack方法,但最终都调用了Unsafe.park()方法。