对于java而言,进程内唯一(线程唯一)是对同一个类加载器而言的。
在一些情况下我们可能会有两个类加载器,这个时候的单例模式并不能保证单例。所以在这种非单一类加载器的情况下,我们需要指定类加载器来执行单例类的创建。
见下方代码:
private static Class getClass(String classname) throws ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if(classLoader == null)
// 如果当前线程的classLoader为null,则指定单例模式的类加载器加载
classLoader = Singleton.class.getClassLoader();
return (classLoader.loadClass(classname));
}
}