Java 如果web服务器已经创建线程,为什么要手动创建线程?

Java 如果web服务器已经创建线程,为什么要手动创建线程?,java,multithreading,Java,Multithreading,我对Java线程概念有一些疑问。我在下面列出了它们 为什么我们必须手动创建线程?web服务器不创建它们吗 对web服务器的每个请求都是线程吗?如果是这样,它如何处理在同一代码上运行它们而不与其他线程冲突 对web服务器的每个请求都是线程吗 应用服务器通过管理一个http工作线程池来处理http流量,当我们用java编写web应用程序时,这对我们来说是透明的。这个线程池的大小是有限的,每个线程都会迭代地使用队列中的请求——每个请求都有一个线程只会杀死您的机器调度器 请记住,我们的servlet、J

我对Java线程概念有一些疑问。我在下面列出了它们

  • 为什么我们必须手动创建线程?web服务器不创建它们吗
  • 对web服务器的每个请求都是线程吗?如果是这样,它如何处理在同一代码上运行它们而不与其他线程冲突
  • 对web服务器的每个请求都是线程吗

    应用服务器通过管理一个http工作线程池来处理http流量,当我们用java编写web应用程序时,这对我们来说是透明的。这个线程池的大小是有限的,每个线程都会迭代地使用队列中的请求——每个请求都有一个线程只会杀死您的机器调度器

    请记住,我们的servlet、JSP或我们使用的任何抽象都是由这些线程之一调用的,您必须了解每个抽象的含义(例如,查找Struts 1 Action类和Spring MVC控制器类之间的差异)

    为什么我们必须手动创建线程

    在JEE中,实际上不应该创建线程,而是依赖应用程序服务器提供的任何机制来创建线程。一些应用服务器管理专用线程池,以便您发送繁重的任务在后台执行,例如工作管理器

    对web服务器的每个请求都是线程吗

    应用服务器通过管理一个http工作线程池来处理http流量,当我们用java编写web应用程序时,这对我们来说是透明的。这个线程池的大小是有限的,每个线程都会迭代地使用队列中的请求——每个请求都有一个线程只会杀死您的机器调度器

    请记住,我们的servlet、JSP或我们使用的任何抽象都是由这些线程之一调用的,您必须了解每个抽象的含义(例如,查找Struts 1 Action类和Spring MVC控制器类之间的差异)

    为什么我们必须手动创建线程

    在JEE中,实际上不应该创建线程,而是依赖应用程序服务器提供的任何机制来创建线程。一些应用服务器管理专用线程池,以便您发送繁重的任务在后台执行,例如工作管理器

    为什么我们必须手动创建线程?web服务器不创建它们吗

    如果您使用的是web服务器,并且该服务器为您处理线程,那么您不会这样做。例如,如果您使用servlet,则不创建线程;您将其留给servlet层。在许多情况下,您不需要运行其他类似的东西(可能您正在编写自己的web服务器,或其他类型的服务器;或希望使用机器中所有CPU核心的应用程序),在这种情况下,您可能需要处理自己的线程创建

    对web服务器的每个请求都是线程吗?如果是这样,它如何处理在同一代码上运行它们而不与其他线程冲突

    这取决于您使用的web服务器。一种典型的方法是拥有一个线程池,并将请求分配给这些线程。请求使用该线程,直到请求完成为止,可能与其他线程上的其他请求一起运行,当请求得到满足时,该线程返回到池中进行重用。但这只是编写web服务器的一种方式

    为什么我们必须手动创建线程?web服务器不创建它们吗

    如果您使用的是web服务器,并且该服务器为您处理线程,那么您不会这样做。例如,如果您使用servlet,则不创建线程;您将其留给servlet层。在许多情况下,您不需要运行其他类似的东西(可能您正在编写自己的web服务器,或其他类型的服务器;或希望使用机器中所有CPU核心的应用程序),在这种情况下,您可能需要处理自己的线程创建

    对web服务器的每个请求都是线程吗?如果是这样,它如何处理在同一代码上运行它们而不与其他线程冲突


    这取决于您使用的web服务器。一种典型的方法是拥有一个线程池,并将请求分配给这些线程。请求使用该线程,直到请求完成为止,可能与其他线程上的其他请求一起运行,当请求得到满足时,该线程返回到池中进行重用。但这只是编写web服务器的一种方式。

    在web应用程序中,通常不需要创建线程。您的问题目前的形式非常模糊。Java线程不仅仅适用于web应用程序。@Marcacierno-那么您的意思是web应用程序中不需要线程?只要servlet没有静态声明的变量,每个线程将只接触属于正在运行的servlet上下文中的servlet实例的数据。因此,除非您打算操作全局数据,否则您不必担心在通常不需要创建线程的web应用程序中线程“冲突”。您的问题目前的形式非常模糊。Java线程不仅仅适用于web应用程序。@Marcacierno-那么您的意思是web应用程序中不需要线程?只要servlet没有静态声明的变量,每个线程将只接触属于正在运行的servlet上下文中的servlet实例的数据。因此,除非您打算操作全局数据,否则您不必担心线程“冲突”