2010-09-15 75 views
0

我正面臨以下問題。我有一個servlet用視頻剪輯提供客戶端請求。但這個視頻剪輯是另一個線程(代碼轉換器)的產品。如果由於代碼轉換器線程尚未完成其作業而導致剪輯未準備好下載,則客戶端請求將失敗! 有關如何處理此案件的任何建議?在線程準備好轉碼後的剪輯之前,如何停止servlet的響應?暫停Servlet響應

在此先感謝! Antonis

+0

http://kb2.adobe.com/cps/173/tn_17328.html – 2010-09-15 12:21:10

+0

真正有用的,感謝 – Antonis 2010-09-15 13:11:18

回答

2

這裏最直接的做法是使用Future。向代碼轉換器提交請求,並立即返回Future。然後,HTTP線程可以阻止此未來呼叫get,直到視頻準備就緒。

加入對我來說聽起來不太合適。線程#加入塊直到目標線程終止,但線程在做完工作後終止是實現細節。例如,如果代碼轉換器將使用緩存線程池,則應用程序。休息。

+0

偉大的答案從你們倆。我會試着去看哪一個符合我的需求。謝謝你們兩位 – Antonis 2010-09-15 12:35:27

+0

再說一次,如果阻塞幾秒鐘,也只能這樣做。對於較長的任務,您不能只將servlet和用戶的瀏覽器掛在那裏。 – Thilo 2010-09-15 12:37:46

2

您可以用常規方式(sleep,wait,join,Future#get)延遲servlet的執行。

就你而言,這聽起來像你想加入線程(或獲得未來),轉碼視頻。

但是,如果您需要阻止的時間只有幾秒鐘,您應該只會這樣做。否則,客戶端瀏覽器可能會超時請求,或者用戶體驗不好。如果代碼轉換工作需要更長時間,請考慮輸出類似進度條的東西,它會繼續輪詢服務器,直到任務完成,然後嘗試加載視頻剪輯。