Unsafe类相关

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 也说明带有可见性 ,对所有线程都是立马可见的

发布了85 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/New_CJ/article/details/93850837