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

时间:2013-06-12 12:46:14

标签: java multithreading web-applications

我是Java的新手,我的经验仅限于在Web容器上运行的基于Web的应用程序(在我的例子中是Jboss)。

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

由于

4 个答案:

答案 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个线程。

这通常足够多线程来充分运用中到大的服务器。

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