前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Unsafe类理解

Java Unsafe类理解

原创
作者头像
不畏浮云遮望眼
修改2022-03-05 18:40:29
3050
修改2022-03-05 18:40:29
举报
文章被收录于专栏:记录学习收获

作用: 提供一种线程安全的方式,在底层进行变量的操作,如CAS等

关键点:

  1. Unsafe类使用时是单例;
  2. Unsafe类的指令是原子的,并对其它线程是可见的,因此命令是线程安全的;

Unsafe类的使用

  1. 实例化时必须用bootStrap类加载器进行加载,因此无法在自己编写的类中进行实例化。可以通过JVM参数指定classPath的形式将编写的类用bootStrap类加载器进行加载;
  2. 可以通过反射进行加载: 下面是通过反射使用Unsafe操作类变量的例子:
代码语言:java
复制
public class UnsafeTest {
    private int i;

    public int getI() {
        return i;
    }

    public void setI(int i) {
        this.i = i;
    }

    public static void main(String[] args) throws NoSuchFieldException {
        UnsafeTest unsafeTest = new UnsafeTest();
        Unsafe unsafe = null;

        try {
            Class<Unsafe> unsafeClass = Unsafe.class;
            Field theUnsafe = unsafeClass.getDeclaredField("theUnsafe");
            theUnsafe.setAccessible(true);
            unsafe = (Unsafe) theUnsafe.get(unsafeClass);
        }catch (Exception e) {

        }
        long offset = unsafe.objectFieldOffset(UnsafeTest.class.getDeclaredField("i"));
        unsafe.putInt(unsafeTest, offset, 2);
        System.out.println(unsafeTest.getI());
    }
}

注:反射实例代码参考博文https://blog.csdn.net/iteye_10121/article/details/82553203

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作用: 提供一种线程安全的方式,在底层进行变量的操作,如CAS等
  • 关键点:
  • Unsafe类的使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档