2015-12-03 43 views
1

我是正確的,取得StampedLock的鎖這兩種方法之間唯一的區別:印花鎖澄清。 Java的

stampedLock.readLock(); 
    stampedLock.tryOptimisticRead(); 

是讀取時鎖定至少由一個線程持有寫鎖不能把它;而樂觀的讀取允許獲取寫入鎖定?

回答

2

基本上,是的。

很多人已經在互聯網上的主題上寫了詞,但我會盡力給你簡要的理解。


stampedLock.readLock(); 

將嘗試得到一個讀鎖,可能是在等待一個寫鎖結束。讀完鎖後,您必須使用unlockRead(long)進行解鎖。鎖是而不是可重入。寫鎖必須等待獨佔訪問,即所有讀鎖都結束。


stampedLock.tryOptimisticRead(); 

沒有鎖住,但返回表示在您請求讀點非零時間戳值。如果返回值爲零,則鎖定當前處於獨佔寫入鎖定狀態,不會等待寫入鎖定結束。寫鎖可以同時獲得並執行寫操作。一旦你完成了你的閱讀行爲,你可以通過validate(long)驗證你的郵票仍然有效。如果true那麼在此期間還沒有獲得寫入鎖定,並且您可以繼續。一般來說,如果false您將升級到readLock()嘗試讀取一個實際的非排他鎖。

希望這會有所幫助。 StampedLock JavaDoc和this article是開始閱讀的好地方。