公平鎖定/非公平鎖定
公平鎖定是指多個執行緒依照申請鎖定的順序來取得鎖。
非公平鎖定是指多個執行緒取得鎖的順序,並非依照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先取得鎖,有可能,會造成優先反轉或飢餓現象。
獨享鎖定/共享鎖定
獨享鎖定是指該鎖定一次只能被一個執行緒所持有。
共享鎖定是指該鎖定可被多個執行緒所持有。
互斥鎖/讀寫鎖定
上面講的獨享鎖定/共享鎖定就是一種廣義的說法,互斥鎖/讀寫鎖定就是具體的實現。
互斥鎖在Java中的具體實作就是ReentrantLock,讀寫鎖在Java中的具體實作就是ReadWriteLock。
樂觀鎖/悲觀鎖
樂觀鎖與悲觀鎖不是指具體的什麼類型的鎖,而是指看待並發同步的角度。
悲觀鎖定認為對於同一個資料的並發操作,一定是會發生修改的,即使沒有修改,也會認為修改。因此對於同一個資料的並發操作,悲觀鎖採取加鎖的形式。悲觀的認為,不加鎖的並發操作一定會出問題。
樂觀鎖定則認為對於同一個資料的並發操作,是不會發生修改的。在更新資料的時候,會採用嘗試更新,不斷重新的方式更新資料。樂觀的認為,不加鎖的並發操作是沒有事情的。
從上面的描述我們可以看出,悲觀鎖適合寫入操作非常多的場景,樂觀鎖適合讀取操作非常多的場景,不加鎖會帶來大量的效能提升。
悲觀鎖定在Java中的使用,就是利用各種鎖。
樂觀鎖在Java中的使用,是無鎖定編程,常採用的是CAS演算法,典型的例子就是原子類,透過CAS自旋實現原子操作的更新。
推薦教學:java入門教學
以上是java中常見的幾種鎖定有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!