我有一個滿足HTTP請求的REST Web服務。從數據庫中提取數據後,我想運行後臺線程並開始分析數據,這需要花費額外的時間來完成。這些數據與響應無關,我們只記錄計算出的分析結果。如何在異步線程中執行後臺計算(在REST Web服務中)
我根據自己對線程概念的理解,嘗試了以下方法。但是在這兩種情況下,HTTP響應都是在後臺計算完成後返回的,所以基本上計算線程和原始線程不是異步的,並且計算線程正在停止響應線程直到分析完成。
啓動守護進程線程。我期望守護線程在後臺運行,同時HTTP方法發送響應。但是,並非如此。只有在此線程中完成計算後才顯示響應。即使父線程退出,守護線程是否應該在後臺運行? (請閱讀詹姆斯的意見,知道如何啓動一個守護進程會一直在這裏的一個問題)
Callable<Boolean> computeCallable = new CallableComputeProcess();
Thread t=new Thread(computeCallable);
t.setDaemon(true);
t.start();
P.S:計算線程是一個子線程我父線程內部創建的。
有沒有辦法異步啓動一個線程,讓後臺運算在後臺運行而不停止http響應?
回覆, 「我預計守護線程來......但是......」 如果你想有人解釋爲什麼你的代碼做了它所做的任何事情,那麼你將不得不向我們展示代碼。 –
Sure @jameslarge。稍後添加代碼。 – kai
Re,「啓動守護程序線程」。如果這意味着你調用了't.setDaemon()',那麼這可能是一個壞主意。在Java的術語中,「守護程序」線程是一個線程,如果程序中沒有其他非守護線程運行,它將自動終止。您可能不希望線程在執行有用的計算時被自動殺死。如果線程的唯一目的是向其他線程提供某種服務,則只應調用setDaemon()。 –