将Tomcat线程专用于servlet

时间:2012-09-25 13:10:26

标签: java multithreading tomcat servlets

是否有配置tomcat来保留特定servlet或webservice的线程? 我知道这可能是在servlet过滤器中以编程方式完成的。

所以假设我使用250个服务线程的默认配置,但是我想要为特定的servlet / webservice保留20个?

也许这显然是不可能的 - 如果是这样,有人可以解释一下原因吗?

我正在使用tomcat 6。

2 个答案:

答案 0 :(得分:8)

根据servlet规范,这是不可能的。但是在Tomcat中,您可以定义在不同端口上运行的多个连接器。每个连接器都有一个单独的线程池:

<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="10443" />

您将找到如何在Tomcat的server.xml文件undere /conf目录中配置线程池的示例。

现在,您可以使用8080(默认)和8081(上面配置)访问您的Web应用程序。通过8081的请求将使用不同的线程池。您现在要做的就是将所有servlet路由到8080,将您的特定线程路由到8081(使用完全独立的线程池)。

如果您不希望有人滥用此功能,请添加一个servlet过滤器,以根据请求的URI检查是否使用了正确的端口。


但请阅读您的理由:

  

我有一个锁定很多服务线程的特定同步服务

您最好启动并管理自己的线程池(查看ExecutorService)并使用异步servlet。更加简单和便携。

答案 1 :(得分:-3)

你为什么要这样做?

Tomcat处理线程正常,如果达到最大值,则无论如何都需要增加最大值。那么保留一些会有什么好处呢?保留一些只是意味着你可以更快地达到最大值,并且在不需要时不能有效地使用它们。

总之不要这样做。