我对 Java 相当陌生,我的经验仅限于在 Web 容器(在我的例子中为 Jboss)上运行的基于 Web 的应用程序。
我是否正确地说,对于 Web 应用程序,Web 容器负责多线程?如果是这样,我可以在基于 Web 的应用程序中引入新的线程吗?这样做有什么好处吗?在什么情况下需要这样做?
谢谢
我对 Java 相当陌生,我的经验仅限于在 Web 容器(在我的例子中为 Jboss)上运行的基于 Web 的应用程序。
我是否正确地说,对于 Web 应用程序,Web 容器负责多线程?如果是这样,我可以在基于 Web 的应用程序中引入新的线程吗?这样做有什么好处吗?在什么情况下需要这样做?
谢谢
大多数 Web 容器使应用程序运行多线程,因为容器实现了“多线程 servlet 模型”。因此,您的应用程序(您的 servlet 代码)已经由多个线程运行,因此,它必须是线程安全的(在访问共享数据时必须使用适当的同步,例如您的 servlet 类的实例字段等)
从您的 Web 应用程序中启动新线程是完全合法的。例如,您可能需要它来启动一些长时间运行的任务(在数据库中注册用户,以发送电子邮件结束,或计算PI
最多 100000 位小数)并在此之后立即关闭用户 HTTP 请求,使用户的浏览器完成加载给定网址。
Web 应用程序服务器倾向于为每个请求创建一个新线程。因此,如果两个用户同时填写并提交表单,您可以放心,这两个请求都是使用单独的线程发送到服务器的。访问任何特定页面的并发用户数实际上将决定页面可以处理的负载。
就创建新线程而言。您当然可以使用传统的 java 方法在应用程序中创建新线程来创建新线程。
通常,您希望创建一个新线程,以防您想要执行异步任务并且不希望用户等待输出。假设在数据库中插入与用户无关的大数据通常会写入线程。
此外,如果您打算在后台执行长时间运行的任务,则代码通常编写在线程内。
有时,访问页面和请求某些内容的用户也需要位于服务器端的线程内。例如,试图访问打印机。在这种情况下,您还需要确保您的代码是在线程内编写的,并且您已经正确同步了该方法。
我是否正确地说,对于 Web 应用程序,Web 容器负责多线程?
大多数服务器都是多线程的,可以同时处理多个请求。
我可以在基于 Web 的应用程序中引入新的踏板吗?
是的,你可以。这取决于您的要求。
这样做有什么好处吗?在什么情况下需要这样做?
如果有一个耗时的工作可以异步完成,那么使用多个线程。
例如,根据请求,您必须读取一个巨大的文件并将其转储到数据库中。在这种情况下,您可以使用多个线程逐行读取并插入数据库。
正如我所说,这取决于。
大多数 Web 应用程序服务器在它们自己的线程上处理传入请求。这意味着如果您的服务器同时处理 5 个请求,它会运行 5 个线程。
这通常足够多线程来充分运行中型到大型服务器。
但是,如果您有非典型的工作负载(例如很少的请求,但每个请求都包含大量计算),那么在此基础上引入您自己的多线程可能值得投资。