基于Java的Web应用程序中的多线程与独立Java应用程序中的多线程有何不同

基于Java的Web应用程序中的多线程与独立Java应用程序中的多线程有何不同,java,multithreading,web-applications,Java,Multithreading,Web Applications,我对Java相当陌生,我的经验仅限于在Web容器上运行的基于Web的应用程序(在我的例子中是Jboss) 对于Web应用程序,Web容器负责多线程,我这样说对吗?如果是这样,我可以在基于Web的应用程序中引入新的踏板吗?这样做有什么好处吗?在什么情况下需要这样做 谢谢 对于Web应用程序,Web容器负责多线程,我这样说对吗 大多数服务器都是多线程的,可以同时处理多个请求 我可以在基于Web的应用程序中引入新的踏板吗 是的你可以。这取决于你的要求 这样做有什么好处吗?在什么情况下需要这样做 如果有

我对Java相当陌生,我的经验仅限于在Web容器上运行的基于Web的应用程序(在我的例子中是Jboss)

对于Web应用程序,Web容器负责多线程,我这样说对吗?如果是这样,我可以在基于Web的应用程序中引入新的踏板吗?这样做有什么好处吗?在什么情况下需要这样做

谢谢

对于Web应用程序,Web容器负责多线程,我这样说对吗

大多数服务器都是多线程的,可以同时处理多个请求

我可以在基于Web的应用程序中引入新的踏板吗

是的你可以。这取决于你的要求

这样做有什么好处吗?在什么情况下需要这样做

如果有一项耗时的工作可以异步地在多个部分中完成,那么就使用多个线程

例如,根据请求,您必须读取一个巨大的文件并转储到数据库中。在这种情况下,您可以使用多个线程逐行读取并插入到数据库中


正如我所说的,这要视情况而定。

大多数web容器使应用程序运行多线程,因为容器实现了“多线程servlet模型”。因此,您的应用程序(servlet的代码)已经由多个线程运行,因此,它必须是线程安全的(在访问共享数据时,必须使用适当的同步,例如servlet类的实例字段等)


从web应用程序中启动新线程是完全合法的。例如,您可能需要它来启动一些长时间运行的任务(在数据库中注册用户,以发送电子邮件结束,或者计算
PI
直到小数点后100000位),然后立即关闭用户HTTP请求,让用户的浏览器完成加载给定的URL。

大多数web应用程序服务器在自己的线程上处理传入的请求。这意味着,如果您的服务器同时处理5个请求,它将运行5个线程

这通常是足够的多线程处理,足以充分运行中大型服务器


但是,如果您有一个非典型的工作负载(例如,请求很少,但每个请求都包含大量计算),那么在此基础上引入您自己的多线程可能是值得投资的。

web应用程序服务器倾向于为每个请求创建一个新线程。同样,如果两个申请者同时填写表单并提交表单,您可以放心,这两个请求都是使用单独的线程发送到服务器的。访问任何特定页面的并发用户数实际上将决定该页面可以处理的负载

就创建新线程而言。您当然可以使用传统的java方法在应用程序内部创建新线程来创建新线程

通常,您希望创建一个新线程,以防您希望执行异步任务,并且不希望用户等待输出。假设在数据库中插入与用户无关的大数据时,通常会在线程中写入

此外,如果您打算在后台执行长时间运行的任务,代码通常写在线程中


有时,要求访问页面并请求某些内容的用户也必须位于服务器端的线程中。例如,尝试访问打印机。在这种情况下,您还需要确保您的代码是在线程中编写的,并且您已经正确地同步了该方法。

谢谢@amicingh。任何一个需要在web应用程序中引入代码级多线程的例子?例如@kapricanon,是一种可能需要一分钟处理的数据库查询。您不希望您的web请求在一分钟内返回,因此您需要分叉后台线程来执行查询并存储结果。然后,web请求可以检查请求的状态,并在后台线程完成时显示结果。