2016-09-26 3 views
0

Я ищу способ поддерживать по-настоящему глобальную переменную на Java, которая действительна для всего экземпляра JVM.Поистине глобальное состояние в Java, «более глобальное», чем «статическое»?

Если я просто использовал поле static где-то, it will fail, если класс, содержащий поле, загружается несколько раз разными загрузчиками классов.

Я могу придумать некоторые неприятные способы решения этой проблемы, такие как использование только стандартных классов JDK (которые обычно должны быть загружены одним и тем же загрузчиком классов) или просить пользовательский MBean сохранить глобальное состояние, но это похоже на взламывает меня.

Отказ от ответственности: Я знаю, что глобальное состояние плохое, и да, я избегаю его, когда могу. Promise.

+1

Если ничего другого, то для моего собственного горящего любопытства, пожалуйста, объясните пример использования. – chrylis

+0

Используйте 'enum'. Обратите внимание, что вы хотите, чтобы на самом деле это скорее «un OO». –

+0

@BoristheSpider Решение enum имеет ту же проблему, что и решение статического поля. – chrylis

ответ

1

Если ваша проблема связана с несколькими загрузчиков классов, то вам нужен глобальный объект, который будет загружаться системным загрузчиком классов, или другой общий загрузчик классов.

Как это зависит от того, как вы запускаете свое приложение, например. в Tomcat, любой файл jar в папке CATALINA_BASE/lib добавляется в общий загрузчик классов.

После того, как класс загружен правильным загрузчиком классов, поля static будут работать так, как вы хотите.

1

Единственный надежный подход, который я могу придумать, не полагается на манипулирование базовым загрузчиком классов контейнера, заключался бы в использовании JNI. Напишите адаптер для собственного кода, который использует сегмент разделяемой памяти или другой подобный механизм для возврата к глобальному состоянию.

2

Свойства системы доступны на одной виртуальной машине, но не перекрестные. Одна виртуальная машина, один набор свойств.

Scope of the Java System Properties Также см

Смежные вопросы