我正在研究一个可能需要几个小时才能完成请求的servlet。但是,调用servlet的客户端只关心该请求是否已被servlet接收。客户端在从servlet获得任何响应之前不想等待数小时。另外,由于调用servlet是一个阻塞调用,客户端只有在收到来自servlet的响应之后才能继续。 为了避免这种情况,我正在考虑在servlet代码中实际启动一个新线程。由servlet启动的线程将执行耗时的处理,从而允许servlet非常快速地向客户端返回响应。但我不确定这是否是一种解决servlet调用阻塞性质的可接受方法。我已经看过NIO,但它似乎并不能保证在任何servlet容器中工作,因为servlet容器也是基于NIO的。Threading in Servlets
3
A
回答
2
您的解决方案是正确的,但在企业应用程序中创建线程被认为是不好的做法。最好使用thread pool或JMS队列。
你必须考虑在处理过程中服务器应该发生什么情况,如何在多个请求(想:数百甚至数千)同时发生时作出反应等等。所以你选择了正确的方向,但是它有点复杂。
2
一个线程并不坏,但我建议把它作为一个任务扔到执行程序池中。更好的是长期工作的经理。按计划快速返回并不是一种坏习惯。我建议提供某种用户反馈,指出用户可以在哪里找到有关长时间运行作业的信息。所以:
- 创建代表了一个独特的ID
- 的工作任务将作业发送到你的后台处理程序对象(即包含的遗嘱执行人)
- 建立唯一的作业ID的URL的工作。
- 返回描述那里他们可以得到的结果
页,结果将与这样的背景下作业管理器来协调页面。在计算时,您可以在此页面上描述进度。完成后,该页面可以显示长时间运行作业的结果。
4
您需要的是作业调度程序,因为他们保证即使在重新启动服务器时也能完成作业。
看看java OSS job schedulers,最值得注意的是Quartz。
相关问题
- 1. Threading In Shoooes
- 2. Threading/UIActivityIndicatorView with In App Purchase
- 3. Python Threading AssertionError
- 4. Spring JdbcTemplate和Threading
- 5. WPF Threading Grab Bag
- 6. Threading基础知识
- 7. Threading,CultureInfo .net,TPL,PLINQ
- 8. Java Swing Threading问题
- 9. Python,Django和Threading问题
- 10. 异步Servlets与同步Servlets
- 11. WPF,BitmapFrames&cross-threading问题
- 12. Threading和Estimote Beacon不等
- 13. Tkinter Threading导致UI冻结
- 14. Servlets encodeRedirectURL
- 15. Servlets - 在多个Servlets中共享Initialcontext
- 16. Python Threading:多行进度报告
- 17. Servlets中的JSON
- 18. Servlets vs Beans
- 19. Java Servlets:性能
- 20. Java中的servlets
- 21. Servlets,JSP,Java?
- 22. Java Servlets和HttpSessions
- 23. 带servlets的Logback
- 24. Java调试servlets
- 25. 使用Servlets?
- 26. Google Guice和Servlets
- 27. ProxyPass by servlets?
- 28. Java Servlets约定
- 29. Threading vs Forking(解释我想做什么)
- 30. Python:从`threading`和`multiprocessing`锁定可互换?