【詳解】Java高併發三種鎖的比較

引入

在Java高併發場景下,主要使用是三種鎖synchronizedStampedLockLock

比較

synchronized StampedLock Lock
是JVM的的內置鎖,每個JDK版本都會優化 是一個Java類,可以更好的擴展 是一個Java類,可以更好的擴展
都是悲觀鎖 提供了寫的樂觀鎖 都是悲觀鎖,但是提供了自旋鎖,或者不阻塞的獲取鎖
性能一般,因爲有一個從用戶態到內核態的過程 性能最好,可以代替讀寫鎖 性能十分不穩定,在複雜的讀寫環境下,性能十分差
不具有公平鎖 不具有公平鎖 具有公平鎖
鎖會自動釋放 鎖需要手動釋放 鎖需要手動釋放

總結

  • StampedLock是性能最好的,可以勝任複雜的讀寫多線程環境
  • 令人驚奇的是synchronized由於是內置鎖,每個JDK版本都會優化,尤其在複雜的讀寫多線程情況下,表現依然很優秀。
  • Lock雖然提供了讀寫鎖,但是性能特別差;而ReentrantLock性能十分好,同時功能豐富

個人推薦如果時讀寫環境,推薦使用StampedLock;如果是正常的加鎖,推薦使用synchronized;如果需要對鎖有更多的控制,推薦使用ReentrantLock

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章