在Java EE中使用静态对象

时间:2015-02-09 09:55:11

标签: java java-ee inheritance static

我的EE应用程序出现了问题,我相信我已经发现了根本原因 - 静态对象在tomcat webapp的所有会话中都可用,并且不会死亡。因此,我需要调整我的代码,以便每个会话都有唯一的对象。

我有几个扩展搜索的类。  搜索目前有

public static Parser parse;

作为一个字段,我通过我的代码引用它。

我扩展搜索的许多其他类都创建了50次左右,每当我需要使用Parser对象时,我只需调用super.getParse()。我想避免制作一个新的,因为这是一个缓慢的过程。

创建单个Parser对象并将其传递给我的代码而不是静态的正确方法是什么?

非常感谢任何建议或指导。

3 个答案:

答案 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)

您正在寻找单身模式,您可以在这里找到参考