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