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...