簡體   English   中英

在servlet中啟動一個新線程

[英]starting a new thread in servlet

當一個請求到達一個處理文件上傳的servlet時,最好使用new Thread(r).start()在該servlet中啟動一個新線程,它將處理上傳的文件附帶的另一個數據。 。 我希望這能同時處理這兩個工作。

這不僅是一個壞主意,但它也行不通。 原因如下:您的文件上傳請求最終會遇到doPost()方法。 只要您使用此方法,容器就會保持連接打開狀態。 從該方法返回后(如果您決定在單獨的線程中處理傳入數據, doPost()將提前完成)容器假定您已完成請求並將關閉連接。 從客戶端的角度來看,服務器中斷了上傳。 並且由於線程的異步性質,中斷將在隨機時刻發生。

相信我,一些用戶已經經歷過: HttpServletResponse似乎會過早定期發送

此外,每個請求啟動新線程是一個壞主意,因為這樣做的擴展性很差(某些規范甚至禁止它)。 可以做的是使用Servlet 3.0異步請求並異步處理上傳,但最好是使用一些線程池。 另請參閱: 為什么使用startAsync創建新線程而不是在servlet線程中工作?

Servlet是由Web服務器在新線程中隱式運行的,因此每當任何請求命中servlet時,它都將在不同的線程中執行。 我沒有預見到自己創建一個新線程的理由

在Servlet中啟動新線程沒有什么不對(與EJB不同),所以是的,沒關系。

編輯:第二個想法@Tomasz Nurkiewicz是對的。 文件上傳將停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM