【问题标题】:Difference between Threads created by web container and Normal Threads?Web容器创建的线程和普通线程之间的区别?
【发布时间】:2015-06-05 02:25:35
【问题描述】:

我可以知道 Web 容器创建的线程(为每个请求创建新线程)与通过扩展线程类或实现可运行接口创建的普通线程有何不同。 Web 容器如何创建线程,即使 Servlet 接口或扩展它的 servlet 不包含任何 run() 方法。

【问题讨论】:

  • 取决于所使用的 Web 容器。
  • @Robby:我正在使用 Apache Tomcat 作为我的 Web 容器。
  • 恐怕你最好的选择是要么搜索 Tomcat 设计文档,要么阅读 Tomcat 源代码。
  • 除了run方法内部的逻辑和池化没有区别。
  • Servlet 容器不会为异常请求创建新线程。它使用一个线程池。从池中取出线程来处理请求,然后放回池中。线程是线程是线程。 Tomcat 线程与任何其他线程没有什么不同。

标签: java multithreading servlets web-container


【解决方案1】:

java中的所有线程都是通过扩展线程类或实现可运行接口创建的。所以 Web 容器线程也是以同样的方式创建的。

你看不到 servlet 内部的 run 方法,那是因为 servlet 代码是在由容器的“主”线程创建的线程的 run 方法内部调用的。 Container 将所有这些细节都抽象出来,这样我们就可以专注于按请求编写实际的逻辑服务器,而不用担心多个请求的管理。

每个容器都有“主”线程,就像我们的独立应用程序一样,或者类似于 Spring 中的 SpringMain。

如果你想区分容器线程和你的线程,你可以看看它们的名字,你应该找到一个模式。您可以控制由您的业务逻辑创建的线程的命名。

【讨论】:

    【解决方案2】:

    线程之间没有区别,除了 web 容器线程通常从线程池中获取,因为每次创建一个新的线程对象都是昂贵且耗时的。

    (线程池是预先实例化的空闲线程的集合,它们准备好接受工作,通常组织在一个队列中)。

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 2010-12-28
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多