• 并发编程之sun.misc.Unsafe类


    1、Unsafe知识点整理

    2、代码:

    package com.javabasic.unsafe;
    
    import java.lang.reflect.Field;
    
    import sun.misc.Unsafe;
    
    /**
     * Unsafe如何使用
     * 
     * 1、使用Unsafe.getUnsafe();获取对象会报错
     * Exception in thread "main" java.lang.ExceptionInInitializerError
    Caused by: java.lang.SecurityException: Unsafe
        at sun.misc.Unsafe.getUnsafe(Unsafe.java:90)
        at com.javabasic.unsafe.UnsafeTest1.<clinit>(UnsafeTest1.java:13)
     * 2、插卡源码,只要通过反射获取成员变量theUnsafe即可
     * @author win7
     *
     */
    public class UnsafeTest2 {
        
        //获取Unsafe实例对象
        static final Unsafe unsafe;
        
        //变量
        private volatile long state=0;
        
        //记录变量state在类UnsafeTest1中的偏移量
        static final long stateOffset;
        
        static {
            //获取state变量在类UnsafeTest1中的偏移值
            try {
                //使用反射获取Unsafe的成员变量theUnsafe
                Field field = Unsafe.class.getDeclaredField("theUnsafe");
                field.setAccessible(true);
                unsafe = (Unsafe)field.get(null);
                stateOffset = unsafe.objectFieldOffset(UnsafeTest2.class.getDeclaredField("state"));
            } catch (Exception e) {
                System.out.println(e.getLocalizedMessage());
                throw new Error(e);
            }
        }
        
        public static void main(String[] args) {
            UnsafeTest2 unsafeTest1 = new UnsafeTest2();
            boolean compareAndSwapInt = unsafe.compareAndSwapInt(unsafeTest1, stateOffset, 0, 1);
            System.out.println(compareAndSwapInt);
        }
    
    }

    3、eclipse中使用Unsafe编译报错

    只需要去掉编译校验即可。

  • 相关阅读:
    Java I/O
    iOS AppsFlyer的使用注意事项
    Star Schema and Snowflake Schema
    SSB基准测试
    ES Route
    CPS(Cyber-Physical Systems)白皮书-摘选
    蓄电池放电容量与环境温度的关系
    时间序列分析(二)
    时间序列分析(一)
    IndexR
  • 原文地址:https://www.cnblogs.com/wangymd/p/12986585.html
Copyright © 2020-2023  润新知