2014-05-19 22 views
0

我正在開發一個安靜的Web服務,部署在Glassfish 4中,並使用Netbeans和Jersey進行Java編程,可以有很長的執行時間(有些情況下需要4-5分鐘)。爲了保持用戶不更新操作並防止瀏覽器發生超時錯誤,我決定啓動處理請求的主線程,並返回一個重定向到另一個靜默網頁的html頁面,該網頁測試請求是否爲略有延遲完成。Restful Web服務中的異步多線程

問題是第一個web服務在返回html響應之前等待線程完成,所以線程幾乎沒用。有什麼辦法可以繞過嗎?

下面是這個第一個服務:

@GET 
@Produces("text/html") 
public String getXml(@QueryParam("id") String id) { 
    Random rand=new Random((new Date()).getTime()); 
    long clientId=rand.nextLong(); 
    MainTestingThread mtt=new MainTestingThread(id,clientId); 
    mtt.run(); 
    return "<!DOCTYPE html><html><head><meta HTTP-EQUIV=\"refresh\" CONTENT=\"10;URL=/checkstatus?clientid="+clientId+"\"/></head><body>Analysis Started and your clientID is \""+clientId+"\".<br/>Please wait...</body></html>"; 
} 

感謝和抱歉,如果我錯過了任何信息,但我非常新的Web服務。

+0

您是否考慮過使用異步調用? https://jersey.java.net/documentation/latest/async.html。它是長期通話的內置機制。 – jjd

+0

我對網絡服務很新,所以我不知道里面有內置的機制......謝謝,我會檢查出來。 – user3653054

回答

0

經過一番研究和一個良好的睡眠,我想通了。問題是我使用mtt.run()而不是mtt.start(),所以它試圖在同一個線程上運行它。