博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java sun.misc.Unsafe类的学习笔记
阅读量:4584 次
发布时间:2019-06-09

本文共 1485 字,大约阅读时间需要 4 分钟。

Java未开源的Unsafe类

Unsafe类可以为我们提供高效并且线程安全方式操作变量,直接和内存数据打交道。

获取Unsafe实体的方法

private static Unsafe getUnsafeInstance() throws SecurityException,        NoSuchFieldException, IllegalArgumentException,        IllegalAccessException {        Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");        theUnsafeInstance.setAccessible(true);        return (Unsafe) theUnsafeInstance.get(Unsafe.class);    }

 

该方法可以获取一个对象的属性相对于该对象在内存当中的偏移量,这样我们就可以根据这个偏移量在对象内存当中找到这个属性。

long objectOffset = unsafe.objectFieldOffset(User.class.getDeclaredField("value"));        Object value = unsafe.getObject(new User(), objectOffset);
//获取静态字段的偏移量 unsafe.staticFieldOffset(User.class.getDeclaredField("value"));

 

常用方法一: compareAndSwapInt(线程安全的)

/** * 比较obj的offset处内存位置中的值和期望的值,如果相同则更新。此更新是不可中断的。 *  * @param obj 需要更新的对象 * @param offset obj中整型field的偏移量 * @param expect 希望field中存在的值 * @param update 如果期望值expect与field的当前值相同,设置filed的值为这个新值 * @return 如果field的值被更改返回true */  public native boolean compareAndSwapInt(Object obj, long offset, int expect, int update);

 

常用方法二:  compareAndSwapObject 和上面方法功能一样,只不过是设置Object类型的变量

public native boolean compareAndSwapObject(Object obj, long offset, Object expect, Object update);

 

常用方法三: putOrderedInt 设置值 并且马上写入主存,该变量必须是volatile类型

 
/** * 设置 volatile 类型到int值*  * @param obj 需要更新的对象 * @param offset obj中整型field的偏移量 * @param expect 希望field中存在的值 */
void sun.misc.Unsafe.putOrderedInt(Object obj, long offset, int expect)

 

转载于:https://www.cnblogs.com/daxin/p/3366606.html

你可能感兴趣的文章
[SDOI2011]工作安排
查看>>
block change tracking buffer space
查看>>
简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。...
查看>>
codeforces 722D Generating Sets 【优先队列】
查看>>
【并发编程】延时初始化
查看>>
编程珠玑--左旋字符串
查看>>
【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十四:储存模块
查看>>
模板 - 字符串 - Manacher
查看>>
2017.1.2
查看>>
Ice_cream's world I
查看>>
echarts中国地图散点涟漪效果
查看>>
三.NFS存储服务
查看>>
sql2008日志文件截断
查看>>
git增加远程仓库
查看>>
[POJ3162]Walking Race(DP + 单调队列)
查看>>
作业3-单元测试
查看>>
【生活日常】一切从Hello World开始
查看>>
微信分享 apicloud方式 中遇到的坎
查看>>
用例图之我见
查看>>
UVA 10972 RevolC FaeLoN(边-双连通+缩点)
查看>>