kim.zhang

风在前,无惧!


  • 首页

  • 标签42

  • 分类12

  • 归档94

  • 搜索

Unsafe.md

发表于 2020-08-10 更新于 2021-11-21 分类于 并发
本文字数: 869 阅读时长 ≈ 1 分钟

Unsafe类

  • AtomicXX类大量采用Unsafe类完成底层操作
  • 位于JDK的rt.jar包中,由BootstrapClassLoader加载的核心类
  • Unsafe类中的方法几乎都为native方法
  • 单例模式

栗子1:直接通过内存地址为对象的属性赋值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class UnsafeDemo0 {

private int age;

public int getAge() {
return age;
}

public static void main(String[] args) {
UnsafeDemo0 demo0 = new UnsafeDemo0();

// 获取Unsafe类实例,单例模式
Unsafe unsafe = Unsafe.getUnsafe();
try {
//获取age属性的内存偏移地址,需要通过反射
long ageOffset = unsafe.objectFieldOffset(UnsafeDemo0.class.getDeclaredField("age"));
//设置age的值为11
unsafe.putInt(demo0, ageOffset, 11);
//输出结果
System.out.println(demo0.getAge());
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}

执行结果:

执行结果抛出异常,只有BootstrapClassLoader加载的类才能调用。

1
2
3
Exception in thread "main" java.lang.SecurityException: Unsafe
at sun.misc.Unsafe.getUnsafe(Unsafe.java:90)
at thread06.UnsafeDemo0.main(UnsafeDemo0.java:20)

栗子2: 通过反射模式可以突破Unsafe类的安全限制

一毛也是爱~
Kim.Zhang 微信支付

微信支付

# JUC
进程间通信.md
进程与线程.md
  • 文章目录
  • 站点概览
Kim.Zhang

Kim.Zhang

且行且珍惜
94 日志
12 分类
42 标签
E-Mail Weibo
  1. 1. Unsafe类
    1. 1.1. 栗子1:直接通过内存地址为对象的属性赋值
    2. 1.2. 栗子2: 通过反射模式可以突破Unsafe类的安全限制
粵ICP备19091267号 © 2019 – 2022 Kim.Zhang | 629k | 9:32
本站总访问量 4 次 | 有 309 人看我的博客啦 |
博客全站共176.7k字
载入天数...载入时分秒...
0%