Java并發包 鎖 ReadWriteLock和StampedLock

ReadWriteLock(讀寫鎖),該接口只定義兩個方法

Lock readLock();
Lock writeLock();

一個用來獲取讀鎖,一個用來獲取寫鎖。也就是說將文件的讀寫操作分開,分成2個鎖來分配給線程,從而使得多個線程可以同時進行讀操作。

ReentrantReadWriteLock

ReentrantReadWriteLock實現了ReadWriteLock接口。相比于ReentrantLock是一個排他鎖,同一時間只允許一個線程訪問,而ReentrantReadWriteLock允許多個讀線程同時訪問,但不允許寫線程和讀線程、寫線程和寫線程同時訪問。相對于排他鎖,提高了并發性。在實際應用中,大部分情況下對共享數據(如緩存)的訪問都是讀操作遠多于寫操作,這時ReentrantReadWriteLock能夠提供比排他鎖更好的并發性和吞吐量。

StampedLock

StampedLock是Java8引入的一種新的所機制,簡單的理解,可以認為它是讀寫鎖的一個改進版本,讀寫鎖雖然分離了讀和寫的功能,使得讀與讀之間可以完全并發,但是讀和寫之間依然是沖突的,讀鎖會完全阻塞寫鎖,它使用的依然是悲觀的鎖策略,如果有大量的讀線程,他也有可能引起寫線程的饑餓。而StampedLock則提供了一種樂觀的讀策略,這種樂觀策略的鎖非常類似于無鎖的操作,使得樂觀鎖完全不會阻塞寫線程。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 既然都可以通過synchronized來實現同步訪問了,那么為什么還需要提供Lock?這個問題將在下面進行闡述。本...
    breaktian閱讀 176評論 0 0
  • 摘要: 我們已經知道,synchronized 是Java的關鍵字,是Java的內置特性,在JVM層面實現了對臨界...
    kingZXY2009閱讀 1,845評論 0 20
  • Lock和synchronized synchronized都知道是用于同步代碼塊和方法的,線程一旦獲得對象鎖,其...
    耳_總閱讀 437評論 0 1
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,673評論 2 17
  • 我們已經知道,synchronized 是java的關鍵字,是Java的內置特性,在JVM層面實現了對臨界資源的同...
    valor_wang閱讀 391評論 0 1