2011-12-01 53 views
0

同步數據下載我想創建像下面一個servlet方法。在這種方法中,我想執行一些數據下載。因此,如果要求下載數據,我只需要下載。如果已經下載了,我想以某種方式第二個請求等到第一個線程完成下載。一旦第一個線程完成下載,第二個線程可以自動啓動。想創建servlet的行動

DoTheDownloadAction(){ 

} 

我該如何達到上述要求?

+0

的下載將變得不可思議的慢,如果連接多個客戶端。 –

回答

0

考慮你有一個DownloadHelper類,並在你的servlet已創建該類的一個實例,那麼你可以做這樣的事情:

DoTheDownloadAction() { 
    synchronized(downloadHelper) { 
     //Downloading something 
    } 
} 

讓我們來想象你有一個被稱爲「下載」與ID按鈕=「下載」,在你的JSP,你必須在你的JavaScript

var globalDownloadStatus = false; 
jQuery(document).ready(function(){ 
    jQuery('#download'(.click(function(){ 
     if(globalDownloadStatus == true) { 
      alert('download already in progress, please wait'); 
      return; 
     } 
     jQuery.get('yourservletpath', function(data){ 
      alert('Download Complete'); 
     }); 
    }); 
}); 
+0

我將有一個jsp頁面,它將顯示正在進行下載。 Soe如果用戶想要做第二次下載,他應該得到一條消息,說明下載已經在進行。我怎麼能做到這一點? –

+0

嗯在這種情況下,你需要下載計數器在JSP頁面中,說你正在使用AJAX,你有一個標誌,檢查是否下載完成與否,如果標記爲假,則通知用戶或者開始下載 – mprabhat

+0

你能請幫助我更多。可能你可以幫助設計jsp頁面以及動作類。 :) –

0

聽起來像是一個信號,或(視複雜程度和下游效應)的簡單的方法來影響同一改變是將下載的代碼同步到您的應用程序相關的關鍵的最佳人選。

0

採取帳戶,通常網絡服務器能分配可擴展性的代碼。通常合適的解決方案是通過數據庫鎖進行同步。但是,對於您可能恰好在要等待的對象上使用​​java關鍵字。

而且,你所要求的悲觀鎖。這通常是糟糕的架構設計。

+0

我將有一個jsp頁面,它將顯示正在進行下載。 Soe如果用戶想要做第二次下載,他應該得到一條消息,說明下載已經在進行。我怎麼能做到這一點? –

+0

你有一個數據庫嗎?如果是這樣,那麼在這裏保持下載狀態。然後有人開始下載,更改記錄。然後有人嘗試 - 檢查記錄。如果你想要純java解決方案,可以使用'java.util.concurrent.locks.ReentrantLock#tryLock()' – kan