關於樂觀鎖和悲觀鎖,你真的瞭解嗎

什麼是鎖?

  • 鎖是用來控制多個線程訪問共享資源的方式,一般來說,一個鎖能夠防止多個線程同時訪問共享的資源。

爲什麼要用鎖?

  • 先來看下鎖定義裏爲什麼要使用多線程呢?
    現在計算機基本都是多核,如果是單線程,會浪費其它覈資源,所以採用多線程。

  • 多線程是併發編程的產物,可以提高系統吞吐量,但是也會導致數據不一致問題。

    例如 :
    進行i++運算,多個核如果同時進行,數據會不一致。
    再例如:
    java中的Servlet容器,是多線程的,所以也會有線程安全問題,造成數據不一致。
    如果還不理解,引出一個真實場景,多窗口賣票(多線程操作同一個共享資源),如果不加處理就會引起超賣等數據不一致情況。

  • 引出鎖 所以引出鎖就是爲了解決這種情況數據不一致問題。

熟悉的都有那些鎖?

  • Synchronized,volatile,Lock

熟悉的鎖的分類?

1,樂觀鎖/悲觀鎖
**悲觀鎖:**併發下,數據操作一定會出錯,所以用Synchronized,volatile,Lock等方法同步執行(類似DB的行級鎖)。
(能保證數據肯定是正確的,但是這樣性能就降下來了,那有什麼辦法,既能不降低性能又能數據操作正確嗎,看下樂觀鎖吧)

樂觀鎖:併發下,數據操作一定不會出錯,所以基本是無鎖編程(CAS算法)(這樣性能是沒有影響,但是數據出錯就不管了?)
樂觀鎖一般採取最常用的版本控制來出錯的數據,會吧數據更新錯誤進行處理。

2,來看下CAS算法。

兩種方案根據試試場景選擇使用。

鎖應用場景實例分析?

多窗口賣票
未完更新。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章