本文目錄一覽:
JAVA 悲觀鎖 樂觀鎖 區別 (認真者採納)
悲觀鎖(Pessimistic Lock), 顧名思義,就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會block直到它拿到鎖。傳統的關係型數據庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。
樂觀鎖(Optimistic Lock), 顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量,像數據庫如果提供類似於write_condition機制的其實都是提供的樂觀鎖。
javamysql樂觀鎖為什麼能防止死鎖
數據庫中有兩種基本的鎖類型:
排它鎖(Exclusive Locks,即X鎖)
共享鎖(Share Locks,即S鎖)。
當數據對象被加上排它鎖時,其他的事務不能對它讀取和修改。加了共享鎖的數據對象可以被其他事務讀取,但不能修改。數據庫利用這兩種基本的鎖類型來對數據庫的事務進行並發控制。
java中悲觀鎖和樂觀鎖的區別
樂觀鎖和悲觀鎖的區別如下:
1、悲觀鎖是當線程拿到資源時,就對資源上鎖,並在提交後,才釋放鎖資源,其他線程才能使用資源。
2、樂觀鎖是當線程拿到資源時,上樂觀鎖,在提交之前,其他的鎖也可以操作這個資源,當有衝突的時候,並發機制會保留前一個提交,打回後一個提交,讓後一個線程重新獲取資源後,再操作,然後提交。和git上傳代碼一樣,兩個線程都不是直接獲取資源本身,而是先獲取資源的兩個copy版本,然後在這兩個copy版本上修改。
3、悲觀鎖和樂觀鎖在並發量低的時候,性能差不多,但是在並發量高的時候,樂觀鎖的性能遠遠優於悲觀鎖。
4、常用的synchronized是悲觀鎖,lock是樂觀鎖。
java什麼是樂觀鎖?什麼是悲觀鎖?
保證數據安全,處理多用戶並發訪問。悲觀鎖,鎖如其名,他對世界是悲觀的,他認為別人訪問正在改變的數據的概率是很高的,所以從數據開始更改時就將數據鎖住,知道更改完成才釋放。樂觀鎖,他對世界比較樂觀,認為別人訪問正在改變的數據的概率是很低的,所以直到修改完成準備提交所做的的修改到數據庫的時候才會將數據鎖住。完成更改後釋放。悲觀鎖會造成訪問數據庫時間較長,並發性不好,特別是長事務。樂觀鎖在現實中使用得較多,廠商較多採用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242483.html