我會盡量總結我所學到的東西。據瞭解,Servlet的3.0和Servlet 3.1解決這個問題,讓我們來看看這樣說:
此前Servlet的3.0:
長期運行的線程導致線程匱乏。在Servlet 3.0之前,針對這些長時間運行的線程有特定於容器的解決方案,我們可以產生一個單獨的工作線程來執行繁重的任務,然後將響應返回給客戶端。在啓動工作線程後,servlet線程返回到servlet池。 Tomcat的Comet,WebLogic的FutureResponseServlet和WebSphere的Asynchronous Request Dispatcher是實現異步處理的一些例子。
(更多信息請參見link 1)
的Servlet 3.0異步:
實際工作可以委託給一個線程池實現(獨立容器特定的解決方案)。 Runnable
實現將執行實際處理,並將使用AsyncContext
將請求分派到另一個資源或寫入響應。我們還可以將AsyncListener實現添加到AsyncContext對象以實現回調方法。
(更多信息參見link 1。)
的Servlet 3.1 NIO:
的Servlet 3.0允許異步請求處理,但只有傳統的I/O被允許。傳統I/O如何影響處理?那麼,如果進入服務器(I/O)的數據阻塞或流傳輸速度慢於服務器可讀,則服務器線程必須等待該數據。另一方面,如果數據寫入ServletOutputStream
的速度較慢,則客戶端線程必須等待。此問題通過ReadListener
和WriteListener
接口解決。這些註冊在ServletInputStream
和ServletOutputStream
。監聽器具有回調方法,當內容可用於讀取或者可以在沒有阻塞的情況下被寫入時,這些回調方法被調用。
(更多信息請參見link 2)
現金 http://www.journaldev.com/2008/async-servlet-feature-of-servlet-3
https://blogs.oracle.com/arungupta/entry/non_blocking_i_o_using