公平鎖/非公平鎖java
公平鎖是指多個線程按照申請鎖的順序來獲取鎖。算法
非公平鎖是指多個線程獲取鎖的順序,並非按照申請鎖的順序,有可能後申請的線程比先申請的線程優先獲取鎖,有可能,會形成優先級反轉或者飢餓現象。編程
獨享鎖/共享鎖併發
獨享鎖是指該鎖一次只能被一個線程所持有。性能
共享鎖是指該鎖可被多個線程所持有。線程
互斥鎖/讀寫鎖同步
上面講的獨享鎖/共享鎖就是一種廣義的說法,互斥鎖/讀寫鎖就是具體的實現。it
互斥鎖在Java中的具體實現就是ReentrantLock,讀寫鎖在Java中的具體實現就是ReadWriteLock。數據
樂觀鎖/悲觀鎖ant
樂觀鎖與悲觀鎖不是指具體的什麼類型的鎖,而是指看待併發同步的角度。
悲觀鎖認爲對於同一個數據的併發操做,必定是會發生修改的,哪怕沒有修改,也會認爲修改。所以對於同一個數據的併發操做,悲觀鎖採起加鎖的形式。悲觀的認爲,不加鎖的併發操做必定會出問題。
樂觀鎖則認爲對於同一個數據的併發操做,是不會發生修改的。在更新數據的時候,會採用嘗試更新,不斷從新的方式更新數據。樂觀的認爲,不加鎖的併發操做是沒有事情的。
從上面的描述咱們能夠看出,悲觀鎖適合寫操做很是多的場景,樂觀鎖適合讀操做很是多的場景,不加鎖會帶來大量的性能提高。
悲觀鎖在Java中的使用,就是利用各類鎖。
樂觀鎖在Java中的使用,是無鎖編程,經常採用的是CAS算法,典型的例子就是原子類,經過CAS自旋實現原子操做的更新。
以上就是java中常見的幾種鎖有哪些的詳細內容,但願對你有所幫助。
碼字不易,點個讚唄💗