1.JDK源码中对这个类进行了严格限制,不能通过常规new的方式去获取该类的实例,也不能通过Unsafe.getUnsafe 获得Unsafe对象实例;只能通过反射机制
Field f = Unsafe.class.getDeclaredField("theUnsafe"); f.setAccessible(true); Unsafe unsafe = (Unsafe) f.get(null);
2.基于native底层方法对内存进行操作:分配内存,设置内存,释放内存等
3.可以定位对象某字段的内存位置,也可以修改对象的字段值,即使它是私有的
4.重要的CAS:给定的对象中,指定属性的值符合预期,则将这个值替换成一个新的值并且返回true;否则就忽略这个替换操作并且返回false
参数分别为:更新的对象,对象中字段的偏移量,修改前的期望值,设置的新的值
更改成功返回true
当expect为 18时:
当expect为 19时:
在利用cas的getAndAddInt等自增的方法:从内存中取初始值,在CAS
5.putXX和 putXXVolatile:直接在内存上设置值,后者带有Volatile 也说明带有可见性 ,对所有线程都是立马可见的