Множественные загрузчики классов и синглтоны ⇐ JAVA
-
Anonymous
Множественные загрузчики классов и синглтоны
Недавно я узнал, что Java-программа может иметь несколько загрузчиков классов. Я нашел несколько сообщений StackOverflow, в которых объяснялось, как создавать одноэлементные объекты.
Общий подход выглядел примерно так:
if (экземпляр == null) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); если (classLoader == ноль) { classLoader = Singleton.class.getClassLoader(); } Class sclass = (classLoader.loadClass(Singleton.class.getCanonicalName())); } Я не совсем понимаю, как это избавляет от проблемы нескольких загрузчиков классов. Если у вас есть несколько ClassLoaders, экземпляр будет иметь значение null, когда каждый из них попытается загрузить класс. Не правда ли? Было бы полезно получить краткое объяснение того, как это работает.
Кроме того, в какой момент мы сможем получить реальный экземпляр Singleton? Я мог бы сделать что-то вроде instance = (Singleton) sclass.newInstance();, но это означало бы создание нового экземпляра для каждого ClassLoader.
Недавно я узнал, что Java-программа может иметь несколько загрузчиков классов. Я нашел несколько сообщений StackOverflow, в которых объяснялось, как создавать одноэлементные объекты.
Общий подход выглядел примерно так:
if (экземпляр == null) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); если (classLoader == ноль) { classLoader = Singleton.class.getClassLoader(); } Class sclass = (classLoader.loadClass(Singleton.class.getCanonicalName())); } Я не совсем понимаю, как это избавляет от проблемы нескольких загрузчиков классов. Если у вас есть несколько ClassLoaders, экземпляр будет иметь значение null, когда каждый из них попытается загрузить класс. Не правда ли? Было бы полезно получить краткое объяснение того, как это работает.
Кроме того, в какой момент мы сможем получить реальный экземпляр Singleton? Я мог бы сделать что-то вроде instance = (Singleton) sclass.newInstance();, но это означало бы создание нового экземпляра для каждого ClassLoader.
Мобильная версия