我正在阅读 java.util.concurrent 包中的代码,我发现 Unsafe 类(用于实现这些同步器)很有趣。我可能永远不会在任何实际代码中使用它,因为类名本身似乎不鼓励这样做,但出于好奇,我对这个类有 2 个问题。
1)。这个类的单例访问器是这样的:
public static Unsafe getUnsafe() {
Class cc = sun.reflect.Reflection.getCallerClass(2);
if (cc.getClassLoader() != null)
throw new SecurityException("Unsafe");
return theUnsafe;
}
所以如果这个方法是从用户代码中调用的,它会抛出一个异常。如何解决这个问题?(可能通过引导类加载器加载我自己的类?这可能吗?)
2)。上面的代码假定getClassLoader
将为由 boostrap 类加载器加载的类返回 null。但是 javadocClass#getClassLoader
说“某些实现可能使用 null 来表示引导类加载器。”,这意味着不能保证这个假设。对于确实违反此假设的实现,Unsafe(以及依赖它的各种类,例如 ReentrantLock)不会完全无法工作吗?
谢谢!