【发布时间】:2015-11-30 14:12:28
【问题描述】:
我觉得这可能已经在某个地方得到了回答,但我找不到它,或者我没有使用正确的关键字。
我想要做的是在Servlet Filter 中初始化一个值,尽可能少地阻塞。我绝不是线程专家,所以这是我想出的:
private static Object getObject() {
if(OBJECT == null) {
synchronized (MyClass.class) {
InputStream is = getInputStream("path_to_file");
OBJECT = loadObject(is);
}
}
return OBJECT;
}
这个方法在Servlet过滤器中使用,会被多个线程同时调用。我想确保在需要时加载它,而不是在 init 方法上。
我的问题是,这个线程安全吗?一旦它被初始化,我认为它会很好,但我想确保它在初始化时能正常工作。
PS:请将我重定向到任何已经回答此问题的问题(如果存在)。谢谢!
【问题讨论】:
-
为什么不在应用启动时初始化呢?
-
这是我的第一个想法,但由于项目中的其他限制,我无法做到这一点。我知道这很糟糕:)
-
@Rob 好的,您的评论让我看到问题比我预期的要深得多。感谢您的帮助
标签: java multithreading servlets