2011-09-21 86 views
2

我正在使用Java-RMI編寫客戶端 - 服務器應用程序。一些服務器端資源必須在互斥模式下訪問(我爲此使用了鎖)。在Java中發生崩潰時釋放鎖定

現在我不知道什麼時候會發生什麼:

  1. 客戶端調用服務器上的遠程方法
  2. 遠程方法遠程方法之前
  3. 客戶端崩潰獲取關於臨界區的鎖離開臨界區

將由關聯到該客戶端的遠程方法調用所獲取的任何鎖被釋放?或者之後其他客戶不可能獲得鎖定?

謝謝您的回答

回答

4

什麼情況是,遠程方法一直執行,直到它完成,並釋放鎖,當它退出臨界區。然後它會嘗試將結果(如果有)返回給客戶端,並且因爲連接已斷開而失敗。

這裏沒有特別的危險......

當然,如果服務器使用Lock對象,而不是原始的鎖/互斥,那麼它需要做的鎖釋放finally塊來處理由於某種意外的異常而失敗的情況。但這是一個不同的問題。客戶端崩潰將不會觸發該情況。

+0

+1:唯一的缺點是服務器不知道早點放棄請求,因爲客戶端已經消失。另一種看待它的方式是服務器的行爲完全一樣。 –