2013-03-27 89 views
1

我有兩個問題。我有一個多線程的Java應用程序。當一個線程在一個鍵上調用getAndLock時會發生什麼,緊接着另一個線程在同一個鍵上調用getAndLock?Couchbase Java getAndLock混淆

  1. 將在第二線程自動阻止,直到第一個線程釋放 鎖?或者,函數調用會返回一個空CAS值嗎?或者,它會拋出一個 異常嗎?

  2. 如果第一個線程刪除了密鑰(整個文檔),第二個線程會發生什麼情況?

回答

0

(Grain of salt;我只熟悉pecl-memcache語義)。

documentation表示它會嘗試獲得鎖定三秒鐘,然後返回OperationTimeoutException。 (正如mikeweid指出的那樣)如果一個鎖已經存在,它應該立即返回,並且指出該密鑰存在於錯誤消息中,但是文檔沒有說明在這種情況下引發了什麼異常/錯誤。對於第二個問題,如果第一個線程刪除一個鍵,它應該返回,就好像該鍵從不存在一樣;在這種情況下,null

+0

我正在使用官方客戶端庫:http://www.couchbase.com/develop/java/current – 2013-03-27 04:49:45

+0

已更新的答案。 – 2013-03-27 04:54:27

+1

只要你知道客戶端將不會阻塞3秒鐘,但當客戶端調用獲取並鎖定已鎖定的密鑰時,將立即返回錯誤。返回的錯誤將是EXISTS。 – mikewied 2013-03-27 17:14:54