悲觀鎖客给、樂觀鎖
定義
- 悲觀鎖-Pessimistic Lock
- 每次獲取數(shù)據(jù)的時候,都會擔心數(shù)據(jù)被修改,所以每次獲取數(shù)據(jù)的時候都會進行加鎖,確保在自己使用的過程中數(shù)據(jù)不會被別人修改蚁阳,使用完成后進行數(shù)據(jù)解鎖。由于數(shù)據(jù)進行加鎖鸽照,期間對該數(shù)據(jù)進行讀寫的其他線程都會進行等待螺捐。
- 樂觀鎖-Optimistic Lock
- 每次獲取數(shù)據(jù)的時候,都不會擔心數(shù)據(jù)被修改移宅,所以每次獲取數(shù)據(jù)的時候都不會進行加鎖归粉,但是在更新數(shù)據(jù)的時候需要判斷該數(shù)據(jù)是否被別人修改過。如果數(shù)據(jù)被其他線程修改漏峰,則不進行數(shù)據(jù)更新糠悼,如果數(shù)據(jù)沒有被其他線程修改,則進行數(shù)據(jù)更新浅乔。由于數(shù)據(jù)沒有進行加鎖倔喂,期間該數(shù)據(jù)可以被其他線程進行讀寫操作。
適用場景
- 悲觀鎖:比較適合寫入操作比較頻繁的場景靖苇,如果出現(xiàn)大量的讀取操作席噩,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷贤壁,降低了系統(tǒng)的吞吐量悼枢。
- 樂觀鎖:比較適合讀取操作比較頻繁的場景,如果出現(xiàn)大量的寫入操作脾拆,數(shù)據(jù)發(fā)生沖突的可能性就會增大馒索,為了保證數(shù)據(jù)的一致性,應用層需要不斷的重新獲取數(shù)據(jù)名船,這樣會增加大量的查詢操作绰上,降低了系統(tǒng)的吞吐量。
- 總結:兩種所各有優(yōu)缺點渠驼,讀取頻繁使用樂觀鎖蜈块,寫入頻繁使用悲觀鎖。