對於每一個請求,都會有很多計算髮生。平均而言,答覆需要大約10分鐘的時間來處理。與此同時,如果用戶發送新的請求,先前的請求絕對沒有意義。取消上一個請求
所以我寫了一個代碼,我基本上中斷了執行它的前一個線程。在tomcat環境中這是一個好習慣嗎?有沒有更好的解決方案來處理它。中斷tomcat線程是否正常? 或者我應該管理自己的線程池,讓池爲我做計算?
更多信息: 基本上整個任務包裹着一個FutureTask。對於每一個請求,這個任務都被執行,並且任務的引用被一個ConcurrentHashMap存儲。對於每個請求,地圖中未來的所有內容都將被「取消」,然後繼續執行最新的請求。從而取消以前的請求。
謝謝。但是沒有維護我們自己的線程池額外的開銷。每個請求都使用額外的線程。其次它是如何影響服務器容量的?我認爲tomcat使用一個CachedThreadPool,池的大小根據請求增加。 – Jatin
最初,我用一個單獨的Pool編寫了代碼。但後來將它移植出來。游泳池有幾個優點。在一個sesnse,你正在打斷你擁有的線程,而不是一些隨機的線程。但是後來由於開銷而移植了 – Jatin
如果你不關心變化的服務器容量,你可以繼續阻塞HTTP線程。無論如何,我認爲在每個工作10分鐘的情況下,創建新線程幾乎沒有成本。或者,如果你有一個靜態/共享線程池,成本可以忽略不計。 – mindas