在Tomcat中打开新线程

时间:2011-07-10 09:56:50

标签: java spring tomcat java-ee spring-mvc

我只是在问理论问题。

我有一个操作需要一段时间,这在一些Servlet doGet / doPost方法或Spring MVC控制器内部执行。打开新的后台线程是一个好主意吗? 它不会导致性能问题吗?

如果我在这种情况下使用jBoss JMS系统,我会得到一些合适吗?

3 个答案:

答案 0 :(得分:3)

没关系(Tomcat不是JavaEE容器)。既然你提到了Spring MVC,我建议在你想要执行的方法上使用@Async - 新的线程将由spring生成(这与等效的JavaEE注释非常相似)

答案 1 :(得分:2)

Servlet 3.0引入了异步处理,这对此有所帮助。

基本上,您将servlet标记为支持异步处理,然后使用上下文启动新线程 - 容器为您执行此操作,以便您不需要自己处理任何线程。

this blog article for an idea。这样做的好处是,您的servlet可以移植到完整的Java EE容器,这不会让您启动自己的线程。

否则,请考虑使用ExecutionService和java.util.concurrent中的朋友。这些天你没有真正的理由自己使用“新线程()”。

答案 2 :(得分:1)

好吧,既然Tomcat不是Java EE容器,而只是一个Servlet容器,你可以毫无问题地打开新线程(除了你应该处理的多线程的典型问题;)。

JMS是一种解决模块全面中间件(一个全新的运行时)来解决消息的解决方案。如果您只是出于效率原因而想要解耦单个流程,那么这种方法对您来说可能过于复杂。

如果您使用的是Spring 3.0,我建议您使用asynchronous calls。您只需使用@Async注释bean的方法,您就完成了:)。