我正在研究一個可能需要幾個小時才能完成請求的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. Readline and threading
- 4. Python Threading AssertionError
- 5. Python Threading stdin/stdout
- 6. PHP Threading SimpleXMLElement
- 7. CoreData和Threading
- 8. gfortran openmp no threading
- 9. Blackhen Threading Library
- 10. SDL2 Threading Seg Fault
- 11. Spring JdbcTemplate和Threading
- 12. WPF Threading Grab Bag
- 13. Threading android疑惑
- 14. Python Ctypes&Threading
- 15. Threading基礎知識
- 16. threading = True with flask-socketio
- 17. Twisted threading howto avoid deepcopy
- 18. Django Signal vs Python Threading
- 19. Java Swing Threading問題
- 20. Threading,CultureInfo .net,TPL,PLINQ
- 21. Python,Django和Threading問題
- 22. 異步Servlets與同步Servlets
- 23. Threading和Estimote Beacon不等
- 24. Tkinter Threading導致UI凍結
- 25. WPF,BitmapFrames&cross-threading問題
- 26. Servlets encodeRedirectURL
- 27. 會話 - servlets
- 28. Servlets - 在多個Servlets中共享Initialcontext
- 29. Python Threading:多行進度報告
- 30. 學習Java Servlets