在Tomcat中开启新线程

3

我只是在提出理论问题。

我有一个操作需要一段时间,在某个Servlet的doGet/doPost方法或Spring MVC控制器内执行。开启新的后台线程并在那里执行是否是一个好主意?这样做会不会导致性能问题?

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

3个回答

3

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


2

Servlet 3.0引入了异步处理,这将有助于此处的问题。

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

请参见此博客文章以获取想法。 这样做的好处是,您的Servlet将可移植到完整的Java EE容器中,这些容器不允许您启动自己的线程。

否则,请考虑使用java.util.concurrent中的ExecutionService和friends。现在没有真正的理由再使用"new Thread()"。


1

由于Tomcat不是Java EE容器,而只是Servlet容器,因此您可以毫无问题地打开新线程(除了您应该处理的多线程问题之外)。

JMS是解耦模块的解决方案,完整的中间件(一个全新的运行时)负责处理消息。如果您只是出于效率原因想要解耦单个进程,则此方法可能过于复杂。

如果您正在使用Spring 3.0,则建议您使用异步调用。您只需使用@Async注释bean的方法即可完成:)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接