Synchronize 和 Lock

一、Synchronize 和 Lock 介紹

  • Synchronize:Synchronize是Java的關鍵字,可以作用於方法、代碼塊上,JVM層次上的控制鎖的獲取和釋放。可以視爲一種悲觀鎖。
  • Lock:其實現類ReentrantLock,相比於Synchronize是JVM層次上的鎖控制而Lock是Java層次的控制鎖的代碼,需要手動釋放鎖。而ReentrantLock屬於樂觀鎖的代表,其實現機制是CAS理論。

二、樂觀鎖和悲觀鎖

  • 樂觀鎖:總是假設最壞的情況,認爲競爭總是存在,每次拿數據的時候都認爲會被修改,因此每次都會先上鎖。其他線程阻塞等待釋放鎖。
  • 悲觀鎖:總是假設最好的情況,認爲競爭總是不存在,每次拿數據的時候都認爲不會被修改,因此不會先上鎖,在最後更新的時候比較數據有無更新,可通過版本號或CAS實現。

三、CAS(Compare And Swap)

  • Java1.5開始引入了CAS,主要放在JUC的atomic包下,如下:
    在這裏插入圖片描述
  • 以AtomicInteger爲例,其中主要方法有:
    在這裏插入圖片描述
    實現原理:將內存位置的內容與給定值進行比較,只有在相同的情況下,將該內存位置的內容修改爲新的給定值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章