多用户Java应用程序的实际工作原理

多用户Java应用程序的实际工作原理,java,multithreading,Java,Multithreading,这个问题相当广泛,我肯定,但我相信我不完全理解多用户应用程序是如何工作的,我想澄清一下这个问题,或者想知道在哪里可以找到更多信息(不知道我知道要搜索什么) 我了解开发方面,但一旦将代码部署到服务器上,它将如何处理多个用户?例如,如果我有一个单例类,那么该类将只在服务器上实例化一次。。。但是该类将需要由多个用户同时使用,这意味着该类中的变量对于每个用户都可能不同,这是如何在幕后实现的 是否只是每个不同的用户将在不同的线程上访问该类的概念?如果是这样的话,这难道不意味着整个应用程序都需要线程安全吗

这个问题相当广泛,我肯定,但我相信我不完全理解多用户应用程序是如何工作的,我想澄清一下这个问题,或者想知道在哪里可以找到更多信息(不知道我知道要搜索什么)

我了解开发方面,但一旦将代码部署到服务器上,它将如何处理多个用户?例如,如果我有一个单例类,那么该类将只在服务器上实例化一次。。。但是该类将需要由多个用户同时使用,这意味着该类中的变量对于每个用户都可能不同,这是如何在幕后实现的


是否只是每个不同的用户将在不同的线程上访问该类的概念?如果是这样的话,这难道不意味着整个应用程序都需要线程安全吗

让我直接解释一下,然后从这一点开始

一旦将代码部署到服务器,它将如何处理多个用户?

---->是的,每个web应用程序或企业应用程序都应该部署在服务器上,web服务器上的web应用程序就像
tomcat
WebSphere上的企业应用程序一样。每个服务器都有一个servlet容器,其中包含多个线程(在tomcat中默认为200个线程),每个输入请求将由单个线程处理(因此多个请求可以并发执行)

如果我有一个单例类,那么该类将只在服务器上实例化一次

--->是的,singleton类每个服务器只有一个实例,所以多个线程可以并发访问同一个对象,这可能会导致数据不一致,这是开发人员的责任。singleton类的主要问题是带有setter方法的
类(实例或静态)
级别变量,因为两个线程可以同时访问同一个对象并更改值,在实时场景中,singleton设计模式用于
连接池
对象

注意局部变量在多线程处理中是最好的,因为每个线程都有自己的堆栈,任何其他线程都无法访问它们

但是该类需要由多个用户同时使用,这意味着该类中的变量对于每个用户来说可能是不同的


--->若要将请求属性保存到对象
模型或POJO
将出现在图片中,这些是
原型
,将为每个请求创建新对象

但是这个类需要多个用户同时使用:是的,它很可能会。类中的变量对于每个用户都可能不同:如果它们是局部变量,那么是的,方法的每次执行都使用与其他执行不同的变量。如果它们是实例变量,那么它们将在所有线程之间共享。这难道不意味着整个应用程序都必须是线程安全的吗:是的,多线程应用程序必须是线程安全的。不过,应用程序(更一般地说,框架)通常会划分出单线程的区域。例如,web服务器的框架可以保证只在一个线程上处理任何一个请求。当然,任何共享资源(包括单例)仍然需要是线程安全的