一般的情況下只有做寫的時候纔會上鎖。
寫: update del insert
查:select
悲觀鎖:
就是比較悲觀,每次
在在執行
我們同步代碼塊的時候都會獲取鎖
,如果沒有獲取到鎖的情況下,當前線程會被變爲阻塞狀態,效率比較低。
阻塞→就緒
Mysql中行鎖概念
在mysql中多個線程對同一行數據做寫的操作的時候,默認會觸發的行鎖的機制,最終只有一個線程才能對該行數據做寫的操作.
其他的線程會被等待。
悲觀鎖應用場景:
synchronized
mysql 中的行鎖機制
Lock鎖。
事務原理
Beign—觸發行鎖機制獲取鎖的權限
Comnit/ rollback—釋放鎖
commit前:
commit後:
數據庫查詢不到 行鎖狀態,因爲已經釋放
Commit
—數據提交到數據庫中同時釋放鎖
Rollback
—回滾數據,同時釋放鎖
沒有commit
:
第一次運行正常,但是因爲沒有釋放鎖,第二次運行會 獲取鎖超時
如何查看mysql中行鎖?
select * from information schema. innodb_ trx t
樂觀鎖機制:
樂觀鎖比較樂觀,做寫的操作沒有鎖概念,也就是不會導致我們程序阻塞。
底層通過版本號碼或者閾值的形式比較CAS、自旋
優點
:效率比較高 沒有阻塞概念 無鎖機制
缺點
:通過死循環控制非常消耗服務器內存
共享鎖與獨佔鎖
獨佔鎖:
多個線程中最終只有一一個線程持有鎖。
共享鎖:
多個線程可以共同一-把鎖lock 讀寫鎖
兩個線程同時讀的