请求线程和程序线程之间有什么区别?

时间:2019-04-01 13:53:12

标签: java multithreading threadpool

我几乎是Java新手。我知道多线程是将程序分成几个任务,以便它们可以并行运行的动作。这个概念有两个问题。

首先,有人说应用程序服务器会为每个请求创建一个线程。我不能将此每个请求线程与程序的线程相关联。假设一个程序中有5个线程可以同时执行操作。每个请求的单个线程将如何处理该程序的5个线程?

其次,我在把握线程池的想法时遇到了问题。是与应用程序服务器根据请求创建的线程有关,还是与程序并行执行任务的线程有关?

2 个答案:

答案 0 :(得分:0)

“线程”在这里有2个不同的概念;有一个Java对象java.lang.Thread,然后有OS级线程。

就OS级别的资源而言,Java或更高级别的任何东西都不会真正“创建”线程。这种线程是由操作系统创建和管理的资源。当应用程序代码或应用程序服务器代码的调用在新的java.lang.Thread上开始时,实际上是在从操作系统借用线程一段时间,然后将其分配给该java.lang.Thread对象。

应用程序,应用程序服务器和JVM都可以创建线程池,并将其用于不同的目的。使用线程池的要点是,重用现有线程比从OS请求一个线程要快。此外,它还可以在发生问题且线程被挂起的情况下限制可能的损坏,从而使您可以限制可能丢失的线程数的上限。

答案 1 :(得分:0)

  

我在把握线程池的概念时遇到问题。

一个简单的线程池是一组正在运行的线程(又名 worker 线程)的集合,其中,每个线程不断尝试从{{1 }},当它得到一个任务时,它执行任务,然后返回队列以等待另一个任务。

任务是具有一些众所周知的方法的对象,工作人员调用该对象以“执行”任务。例如,在Java标准库定义的线程池中,任务对象是BlockingQueue实例或Runnable实例,并且工作程序通过调用Callable或{{1}执行任务}。