10 Synchronized 悲觀鎖,可重入鎖

2021-09-02 04:08:06 字數 1030 閱讀 3181

synchronized:悲觀鎖,可重入鎖

特點:可重入的鎖

可重入鎖,乙個獲得的鎖的執行緒沒執行完可以繼續獲得該鎖。

執行緒占用鎖的時候,如果執行的同步**出現異常,會自動將鎖讓出。

同步**塊的**是同步執行的(一次執行完),而非同步**塊的**可以非同步執行。

要求鎖的獲取和釋放存在同乙個塊結構中;

當獲取了多個鎖時,它們必須以相反的順序釋放;

使用注意事項:區分鎖物件(鎖不同沒有互斥作用)

分類具體分類

當前鎖物件

偽**同步

方法例項方法

當前例項物件

public synchronized void mymethod()

靜態方法

類物件public static synchronized void mymethod()**

塊例項物件

當前例項物件

synchronized(this)

class物件

類物件synchronized(myclass.class)

object物件

例項物件obj

synchronized(obj)

原理:

synchronized用於鎖住當前的物件。當執行到被synchronized修飾的**時,需先獲取當前的鎖物件。獲取失敗,則進入阻塞佇列中等待;獲取成功則執行**,執行完成後釋放鎖物件,並通知阻塞佇列。

jmm中的記憶體可見性

鎖獲取成功時,從主存讀取共享變數到本地記憶體中;釋放鎖成功時,強制重新整理本地記憶體資料到主存中。

synchronized優化

使用的是悲觀鎖的策略,即同一時間只能有乙個執行緒去獲得鎖。而cas是樂觀鎖的策略,

Synchronized可重入鎖分析

可重入鎖又稱遞迴鎖,是指在同乙個執行緒在外層方法獲取鎖的時候,再進入該執行緒的內層方法會自動獲取鎖 前提是鎖物件必須是同一物件或者class 不會因為之前已經獲取過還沒實方而發生阻塞。即同一執行緒可執行多個持有同乙個鎖的方法。先來一段 public class reentrantsynchroniz...

Synchronized可重入鎖通俗易懂的簡單分析

可重入鎖概念 當乙個執行緒得到乙個物件鎖後,再次請求此物件時時可以再次得到該物件的鎖的,這也證明synchronized方法 塊的內部呼叫本類的其他synchronized方法 塊時,時永遠可以得到鎖的。public class service synchronized public void se...

synchronized 鎖的重入

1 乙個同步方法呼叫另外乙個同步方法,能否得到鎖?重入 synchronized預設支援重入 slf4j topic test public class demo catch interruptedexception e test2 為什麼test2還需要加sync 他本身就包含在test1 而te...