Я чувствую, что это, вероятно, уже где-то ответили, но я не мог его найти или, возможно, не использовал правильные ключевые слова.Метод Threadsafe в сервлет-фильтре
Что я хочу сделать, это инициализировать значение в Servlet Filter
с минимальной блокировкой. Я ни в коем случае не эксперт в области потоков, так вот что я придумал:
private static Object getObject() {
if(OBJECT == null) {
synchronized (MyClass.class) {
InputStream is = getInputStream("path_to_file");
OBJECT = loadObject(is);
}
}
return OBJECT;
}
Этот метод используется в сервлет фильтр, который будет вызываться несколькими потоками одновременно. Я хочу убедиться, что я загружаю это, когда это необходимо, а не на метод init
.
Мой вопрос в том, является ли эта тема безопасной? После инициализации я думаю, что это будет хорошо, но я хочу убедиться, что он работает, когда он инициализируется.
PS: Пожалуйста, перенаправить меня на любой вопрос, который уже отвечает на это, если они существуют. Благодаря!
Почему бы не инициализировать его при запуске приложения? –
Это была моя первая идея, но другими ограничениями в проекте я не могу этого сделать. Я знаю, что это плохо :) –
@Rob Хорошо, ваш комментарий заставил меня понять, что проблема довольно глубже, чем я ожидал. Спасибо за вашу помощь –