在servlet中创建一个线程池是不是很糟糕?

时间:2014-02-27 22:07:01

标签: tomcat servlets

我有一个httpservlet,它必须与不同的服务建立多个连接才能提供答案。这些请求非常少,并且对servlet本身的调用是由ajax完成的,而且我创建的只是一个程序的Web界面,将由少数用户同时使用。

现在,我想将一个线程池实例化到servlet并让它执行我的任务,一个连接将确保每个线程在继续之前完成。

无论如何,我读到,servlet中的垃圾邮件线程是一种不好的做法。 但是,使这些连接并行是解决问题的最佳方法。

那么,你有什么建议?最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

这不是一个“坏主意”,但需要小心谨慎。根据服务器的负载,可用的内存和CPU数量等,它可能确实是最好的方式。我们一直在做我的工作。

一个好的起点是使用线程池。 Java 1.5+有一个很好的类,称为ExecutorService

您可以创建一个为所有Servlet请求共享的单个池,或每个请求一个池。

拥有共享池会为您提供这些工作线程的绝对上限。每个请求都有一个新线程可以使servlet请求之间保持交互(一个请求不能占用所有线程)。

除了考虑您的用例之外,还有一些方法可以使用单个线程为多个HTTP调用提供服务,具体取决于您使用的库。他们会在幕后使用nio。我不知道我头顶的任何名字。