對於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));
}
}