java鎖名詞解釋

一.公平鎖/非公平鎖(FairSync/NonfairSync):
  公平鎖: 公平鎖是指多個線程按照申請鎖的順序來獲取鎖。(先嚐試獲取鎖, 失敗進隊列)
  非公平鎖: 非公平鎖是指多個線程獲取鎖的順序並非按照申請鎖的順序,有可能後申請的線程比先申請的線程優先獲取鎖。有可能,會形成優先級反轉或者飢餓現象。

二.悲觀鎖/樂觀鎖(鎖的類型):
  悲觀鎖:悲觀鎖認爲寫操做頻繁,因此每次讀寫都會上鎖。sycchronized 就是悲觀鎖的一種實現,同時也是一種重量級鎖。
      悲觀鎖認爲對於同一個數據的併發操做必定是會發生修改。所以對於同一個數據的併發操做,悲觀鎖採起加鎖的形式。悲觀的認爲不加鎖的併發操做必定會出問題。
  樂觀鎖:樂觀鎖認爲讀多寫少(併發寫的可能性低),因此不上鎖。每次更新前讀取版本號,並比較版本號,若是一致則認爲沒有其餘線程的寫操做而完成更新,

      若版本號不一致則放棄這次更新,並重復這次更新(讀版本號,比較,更新)操做。
     樂觀鎖則認爲對於同一個數據的併發操做,是不會發生修改的。在更新數據的時候,會採用嘗試更新,不斷從新的方式更新數據。樂觀的認爲不加鎖的併發操做沒有問題。java

三.自旋鎖:
  自旋鎖是指嘗試獲取鎖的線程不會當即阻塞,而是採用循環的方式去嘗試獲取鎖,這樣的好處是減小線程上下文切換的消耗,等待競爭鎖的線程不須要作內核態和用戶態之間的切換進入阻塞掛起狀態
  缺點是循環會消耗CPU,若是持有鎖的線程執行的時間超過自旋等待的最大時間扔沒有釋放鎖,就會致使其它爭用鎖的線程在最大等待時間內仍是獲取不到鎖,這時爭用線程會中止自旋進入阻塞狀態.

四.獨享鎖/共享鎖:
  獨享鎖(排它鎖,互斥鎖)是指該鎖一次只能被一個線程所持有,例:ReentrantLock
  共享鎖是指該鎖可被多個線程所持有,例:ReadLock
  獨享鎖與共享鎖也是經過AQS來實現的,經過實現不一樣的方法,來實現獨享或者共享

五.讀寫鎖:
  ReadWriteLock--ReadLock讀鎖(共享鎖),WriteLock寫鎖(獨享鎖)

六.分段鎖:
  分段鎖並非鎖的名稱,是指鎖的設計方式,java中的例子(ConcurrentHashMap),鎖單個Node(數組的單個元素)

七.偏向鎖/輕量鎖/重量鎖
  這三種鎖是指鎖的狀態,而且是針對Synchronized。在Java 5經過引入鎖升級的機制來實現高效Synchronized。這三種鎖的狀態是經過對象監視器在對象頭中的字段來代表的。
  偏向鎖是指一段同步代碼一直被一個線程所訪問,那麼該線程會自動獲取鎖。下降獲取鎖的代價。
  輕量級鎖是指當鎖是偏向鎖的時候,被另外一個線程所訪問,偏向鎖就會升級爲輕量級鎖,其餘線程會經過自旋的形式嘗試獲取鎖,不會阻塞,提升性能。
  重量級鎖是指當鎖爲輕量級鎖的時候,另外一個線程雖然是自旋,但自旋不會一直持續下去,當自旋必定次數的時候,尚未獲取到鎖,就會進入阻塞,該鎖膨脹爲重量級鎖。重量級鎖會讓其餘申請的線程進入阻塞,性能下降.數組

相關文章
相關標籤/搜索