当多个用户使用Web应用程序时,普通的旧Java对象会发生什么?

时间:2011-12-05 14:54:00

标签: java object web pojo

我正在尝试创建一个类似服务的简单应用程序。我使用浏览器作为入口点,servlet作为请求的接收者和几个辅助java类。例如,我让用户A与用户B同时使用该应用程序。

现在我的问题是,当多个用户访问服务时,帮助程序类会发生什么?每次用户使用该应用程序时,它们都会被实例化吗? 5个用户,他们(帮助者类)是否实例化了5次,或者对于所有用户,只有一个副本?

4 个答案:

答案 0 :(得分:2)

这取决于您实例化这些POJO的时间和地点。如果要在doGet或doPost上实例化它们,则在每个请求上创建这些对象的新实例(并在响应请求后丢弃它们)。现在,如果您将它们“延迟实例化”到更长的内存范围(会话等),那么您可以将它们保留更长时间(例如,对于会话范围,在会话的整个生命周期内)。

答案 1 :(得分:1)

一个简单的答案是,无论何时使用new YourClasseName(),都要实例化一个新对象。

由于servlet容器为每个单个servlet的新请求分配一个线程(除非你做了某些特殊的更改),然后简单地说,5个users = 5个threads = 5个调用来构建你的pojos。意味着你的对象被实例化了5次。

答案 2 :(得分:1)

我认为你需要先回过头来了解一下java实例化及其生命周期。并且要更具体地说明您的情况,请提供代码段。这取决于你如何实例化助手类,我能想到的3种可能性:

1-常规助手类

在这种情况下,您只需调用Helper h = new Helper();,然后只需在助手类h.doHelp(param)上调用操作 - 每次Servlet调用它时,它都会创建Helper类的新实例。除非您的助手类使用任何静态变量。

2 - 单身人士

当您将Helper类实现为Singleton并且您的Servlet以Singleton的方式调用它时,例如Helper h = Helper.getInstance()如果您这样做,那么对Servlet的每个请求都共享Hepler类的相同实例

3 - 静态类

如果您的助手类只使用静态方法,例如。 Helper.doHelp(param);然后在不同的请求之间也没有共享,除非你的助手类使用任何静态变量。

答案 3 :(得分:1)

你的帮助程序类应该是单例,这样userA和userB都将使用相同的实例而不是实例化两次。