我只是在問理論問題。在Tomcat中打開新主題
我有一個操作需要一些時間,這是在一些Servlet doGet/doPost方法或Spring MVC控制器內執行的。打開新的後臺線程並在那裏執行它是個好主意? 它不會導致性能問題嗎?
如果我在這種情況下使用jBoss JMS系統,我會得到一些好處嗎?
我只是在問理論問題。在Tomcat中打開新主題
我有一個操作需要一些時間,這是在一些Servlet doGet/doPost方法或Spring MVC控制器內執行的。打開新的後臺線程並在那裏執行它是個好主意? 它不會導致性能問題嗎?
如果我在這種情況下使用jBoss JMS系統,我會得到一些好處嗎?
沒關係(Tomcat不是JavaEE容器)。自從你提到Spring MVC以來,我會建議在你想執行的方法上使用@Async
- 新的線程將在春季產生(這與JavaEE等效註釋非常相似)
好吧,既然Tomcat是不是Java EE容器,而只是一個Servlet容器,你可以打開新的線程沒有任何問題(除了多線程你應該處理的問題tipical;)。
JMS是一個解決模塊全面中間件(一個全新的運行時),負責消息的解決方案。出於效率原因,如果您只是想要分離單個進程,那麼這種方法可能對您而言過於複雜。
如果您使用的是Spring 3.0,我建議您使用asynchronous calls。你只需使用@Async註釋一個bean的方法,你就完成了:)。
Servlet 3.0引入了異步處理,這將有助於這裏。
基本上,你標記servlet作爲支持異步處理,然後利用上下文來啓動一個新線程 - 容器會爲你,這樣你就不需要用線程來處理自己的事情。
請參閱this blog article for an idea。這樣做的好處是,你的servlet將被移植到完整的Java EE容器,不會讓你開始自己的線程。
否則,請考慮使用ExecutionService和來自java.util.concurrent的朋友。現在沒有真正的理由自己使用「新線程()」。