首頁  >  文章  >  Java  >  java中常見的幾種鎖定有哪些

java中常見的幾種鎖定有哪些

王林
王林原創
2019-11-20 17:43:348225瀏覽

java中常見的幾種鎖定有哪些

公平鎖定/非公平鎖定

公平鎖定是指多個執行緒依照申請鎖定的順序來取得鎖。

非公平鎖定是指多個執行緒取得鎖的順序,並非依照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先取得鎖,有可能,會造成優先反轉或飢餓現象。

獨享鎖定/共享鎖定

獨享鎖定是指該鎖定一次只能被一個執行緒所持有。

共享鎖定是指該鎖定可被多個執行緒所持有。

互斥鎖/讀寫鎖定

上面講的獨享鎖定/共享鎖定就是一種廣義的說法,互斥鎖/讀寫鎖定就是具體的實現。

互斥鎖在Java中的具體實作就是ReentrantLock,讀寫鎖在Java中的具體實作就是ReadWriteLock。

樂觀鎖/悲觀鎖

樂觀鎖與悲觀鎖不是指具體的什麼類型的鎖,而是指看待並發同步的角度。

悲觀鎖定認為對於同一個資料的並發操作,一定是會發生修改的,即使沒有修改,也會認為修改。因此對於同一個資料的並發操作,悲觀鎖採取加鎖的形式。悲觀的認為,不加鎖的並發操作一定會出問題。

樂觀鎖定則認為對於同一個資料的並發操作,是不會發生修改的。在更新資料的時候,會採用嘗試更新,不斷重新的方式更新資料。樂觀的認為,不加鎖的並發操作是沒有事情的。

從上面的描述我們可以看出,悲觀鎖適合寫入操作非常多的場景,樂觀鎖適合讀取操作非常多的場景,不加鎖會帶來大量的效能提升。

悲觀鎖定在Java中的使用,就是利用各種鎖。

樂觀鎖在Java中的使用,是無鎖定編程,常採用的是CAS演算法,典型的例子就是原子類,透過CAS自旋實現原子操作的更新。

推薦教學:java入門教學

以上是java中常見的幾種鎖定有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn