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