java未開源的Unsafe類


如何使用Unsafe類呢?

方式一:通過Unsafe提供的工廠方法。

Unsafe unsafe = Unsafe.getUnsafe(); 通過這樣的方式獲得Unsafe的實力會拋出異常信息,因為在unsafe的源碼中會有對安全性的檢查

public static Unsafe getUnsafe() {
        Class cc = sun.reflect.Reflection.getCallerClass(2);
        if (cc.getClassLoader() != null)
            throw new SecurityException("Unsafe");
        return theUnsafe;
    }

Exception in thread "main" java.lang.SecurityException: Unsafe
	at sun.misc.Unsafe.getUnsafe(Unsafe.java:68)
	at org.wk.core.concurrent.InitUnsafe.main(InitUnsafe.java:12)

方式二:通過反射的方式。

因為在開源版本的Unsafe.java中聲明了一個實例域,所以我們可以通過反射的方式來獲得這個域。

 

private static final Unsafe theUnsafe = new 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);
	}

 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM