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

当一个web应用程序被多个用户使用时,普通的旧Java对象会发生什么情况?,java,object,web,pojo,Java,Object,Web,Pojo,我正在尝试创建一个简单的服务,比如应用程序。我使用浏览器作为入口点,servlet作为请求的接收者,以及两个helper java类。例如,我让用户A与用户B同时使用应用程序 现在我的问题是,当多个用户访问服务时,助手类会发生什么情况?它们是否在用户每次使用应用程序时都被实例化?5个用户,他们(助手类)实例化了5次,还是所有用户都只有一个副本?这取决于您何时何地实例化这些POJO。如果要在doGet或doPost上实例化这些对象,则在每个请求上创建这些对象的新实例(并在响应请求后丢弃它们)。现在

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


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

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

一个简单的答案是,每当您使用
新YourClasseName()
时,您都在实例化一个新对象


由于servlet容器为单个servlet的每个新请求分配一个线程(除非您做了某种特殊的更改),因此简单地说,5个用户=5个线程=5个调用来构造POJO。这意味着您的对象被实例化了5次。

我认为您需要回去阅读java中的类实例化及其生命周期。为了更具体地针对您的情况,请提供代码片段。这将取决于您如何实例化助手类,我可以想到三种可能性:

1-常规助手类

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

2-单身

当您将Helper类实现为单例,并且Servlet以创建单例的方式调用它时,例如
Helper h=Helper.getInstance()
如果您以这种方式执行,那么对Servlet的每个请求都共享同一个Hepler类的实例

3-静态类


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

您的助手类应该是单例的,这样userA和userB都将使用相同的实例,而不是实例化两次

我不明白,POJO是助手类吗?或者你知道POJO会发生什么,但不确定helper类会发生什么?很抱歉解释不清楚。POJO是助手类。我不确定当多个用户使用web应用程序时,他们会发生什么情况。@西蒙:如果不看一下您的代码,就无法提供答案。有几种使用Java类(和对象)的方法。它们是静态的吗?实例化?上课?实例?地方的等等,嘿,谢谢@omarello,我对servlets的行为有点困惑。但你解释得很清楚。我只使用常规的助手类。在实例化的最后,我有h1、h2、h3,每个都有自己的助手方法。我想我可以做到这一点,但如果我为每个请求执行创建和销毁循环会更好吗?