zoukankan      html  css  js  c++  java
  • sun.misc.Unsafe

    sun.misc.Unsafe是jdk中为了方便使用java语言灵活操作内存预留的类,由于该类是直接操作内存,所以从java的角度被定义为不安全的,也就是类名的由来。

    经常分析jdk源码的同学肯定不陌生,因为jdk中很多地方都用到了这个类。

    创建实例:、

    sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe()

    主要方法如下,本质都是传入一个对象以及字段在内存中相对于对象起始地址的偏移量,还有设置的值

    //获取字段在内存中相对于对象起始地址的偏移量

    private static final long parkBlockerOffset = UNSAFE.objectFieldOffset(Thread.class.getDeclaredField("parkBlocker"));

    // CAS操作(需要CPU的支持)设置对象的属性值,类似的还有compareAndSwapInt等

    unsafe.compareAndSwapObject(this, tailOffset, expect, update);  类似的还有compareAndSwapInt等

    // 给指定的对象设值参数,第二个参数是属性在内存中相对于对象起始地址的偏移量

    UNSAFE.putObject(targetObj, parkBlockerOffset, arg); 

    UNSAFE.putObjectVolatile(targetObj, parkBlockerOffset, arg); 

    // 获取对象的属性值

    UNSAFE.getObject(targetObj, parkBlockerOffset);

    UNSAFE.getObjectVolatile(targetObj, parkBlockerOffset);

    // 挂起线程以及唤醒线程,具体参见我的其他相关随笔。

    UNSAFE.park(isAbsolute, long)

    UNSAFE.unpark(thread);

  • 相关阅读:
    codevs 1069关押罪犯
    codevs 1497取余运算
    codevs 3324 新斯诺克
    codevs 3286 火柴排队
    继续畅通工程
    还是畅通工程
    畅通工程(并查集找根节点)
    Eddy's picture(最小生成树)
    Constructing Roads(最小生成树)
    Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/restart30/p/10826964.html
Copyright © 2011-2022 走看看