我只是在问理论问题。
我有一个操作需要一段时间,这在一些Servlet doGet / doPost方法或Spring MVC控制器内部执行。打开新的后台线程是一个好主意吗? 它不会导致性能问题吗?
如果我在这种情况下使用jBoss JMS系统,我会得到一些合适吗?
答案 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的方法,您就完成了:)。