Tomcat的Threadpool究竟是如何工作的

时间:2014-04-04 05:45:42

标签: java multithreading tomcat threadpool

所以这是我的理解。

Apache Tomcat的线程池(称为连接器Threadpool?)有多个线程(默认为200)。现在这意味着在特定时间,200人可以与我的Web应用程序进行通信。

现在,在某个特定内容与我的应用程序连接时采用一种方案。我收到一个请求,服务器上的tomcat客户端检查是否有可用的线程来满足请求。如果它是好的,否则我们会给出一些错误代码。现在,如果成功,那个我已分配给该请求的一个线程是否会与该特定客户端关联,直到他的请求未被处理为止?

基本上,作为用户,如果我去www.myApp.com,我从线程池中获取一个线程,该线程从服务器获取所有信息并返回最终的html。之后,线程是免费的,然后回到池中。现在,如果我点击其他内容,那么再次转到线程池并获得一个线程(如果可用)并继续进行。这是它的工作原理吗?

问题2

比方说,我的服务器端有一个Java应用程序。所以,当我点击一个网址时,它会带我去一些java代码。现在是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码吗?

如果是这样的话,如果我在我的java代码中创建新线程会发生什么,这些线程是从Tomcat的线程池获取还是来自Java的线程池创建的?另外,在这种情况下,执行Tomcat的线程会发生什么?

感谢。

请提供一些Tomcat官方参考/资源,如果您了解任何内容,我可以阅读这些内容。欢呼声。

1 个答案:

答案 0 :(得分:8)

  

现在这意味着在特定时间,200人可以与我的网络应用程序进行通信。

不完全是。这意味着您的服务器可以 1 同时处理 200个请求。队列中可能有许多其他请求等待线程可用。

  

现在如果成功,那个我已分配给该请求的一个线程是否会与该特定客户关联,直到他的请求未被处理为止?

是...除非您使用的是最近版本的Servlet规范中添加的异步请求处理功能。 (在这种情况下,有可能处理超过200个请求"同时" 200个线程。但这需要一个请求在等待某事发生时将控制放弃到另一个请求。阅读{{3引言。)

  

这是如何运作的?

或多或少......

1 - 为了迂腐,您(可能)需要200多个核心来处理在同一时刻发生的200个请求。所以,我同时使用""从最终用户的角度来看,他们无法了解服务器内部实际发生的情况"黑匣子"。但话说回来,一个物理线程/核心并非不可能在同一时刻为多个请求执行工作。最明显的情况是有很多相同的请求一起处理。


  

我们说,我的服务器端有一个Java应用程序。所以,当我点击一个网址时,它会带我去一些java代码。现在是,我从Tomcat Threadpool获得的线程,该线程将执行我的代码吗?

这没有意义。如果您在服务器端有一个Java应用程序,那么您需要解释如何从HTTP请求("点击[sic] url")到运行Java应用程序。只有这样我们才能告诉你是否涉及线程池线程。

  

如果是这样的话,如果我在我的java代码中创建新线程会发生什么,这些线程是从Tomcat的线程池获取还是来自Java的线程池?另外,在这种情况下,执行Tomcat的线程会发生什么?

再一次,这取决于您的Java应用程序的运行方式。例如,如果您的webapp使用Runtime.exec("java ... classname")在服务器端运行应用程序,那么它与Tomcat位于一个单独的JVM中,并且所有应用程序线程都不在Tomcat线程池中。

还有人指出,没有" Java线程池" 本身。如果您的Java应用程序选择,它可以创建和使用线程池。但如果它没有,那么Java线程就不会被合并。当它们终止时,它们基本上被丢弃,当Thread对象被垃圾收集时,任何剩余的数据结构都被回收。