我的EE应用程序出现了问题,我相信我已经发现了根本原因 - 静态对象在tomcat webapp的所有会话中都可用,并且不会死亡。因此,我需要调整我的代码,以便每个会话都有唯一的对象。
我有几个扩展搜索的类。 搜索目前有
public static Parser parse;
作为一个字段,我通过我的代码引用它。
我扩展搜索的许多其他类都创建了50次左右,每当我需要使用Parser对象时,我只需调用super.getParse()
。我想避免制作一个新的,因为这是一个缓慢的过程。
创建单个Parser对象并将其传递给我的代码而不是静态的正确方法是什么?
非常感谢任何建议或指导。
答案 0 :(得分:2)
这里该怎么做:
从对象中删除静电
将对象放入用户会话
像这样每个用户都在他的会话中有他的对象
看到这可能会有所帮助 HttpSession - how to get the session.setAttribute?
答案 1 :(得分:0)
如果您确实需要唯一对象,请使用同步访问器,或使用线程局部变量。
请注意,如果所有查询都需要访问该唯一对象,则使用同步访问器可能会降低应用程序的吞吐量。在这种情况下,线程局部变量(即不那么独特,但在会话范围内唯一)将是更好的解决方案。
请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
答案 2 :(得分:0)
您正在寻找单身模式,您可以在这里找到参考