Synchronized 鎖重入分析及Demo實現

2021-08-29 14:17:17 字數 1890 閱讀 8759

關鍵字synchronized擁有鎖重入的功能,也就是在使用synchronized時,當乙個執行緒得到乙個物件鎖後,再次請求此物件鎖時是再次得到該物件的鎖的,這也證明在乙個synchronized方法 / 塊內部呼叫本類的其他synchronized方法 / 塊時,是永遠可以得到鎖的。

「可重入鎖」的概念是:自己可以再次獲取自己的內部鎖。

demo**如下:

public class demoservicereentrencelock  catch (exception e) 

} synchronized public void service2() catch (exception e)

} synchronized public void service3()

}

public class testdemoservicereentrencelock extends thread

@override

public void run()

public static void main(string args)

}

//執行結果:

thread-1 - service1 獲取鎖 - 463506790016015

thread-1 - service1 - 1540134076620

thread-1 - service2 獲取鎖 - 463511789963967

thread-1 - service2 - 1540134081620

thread-1 - service3 獲取鎖 - 463511790385900

thread-1 - service3 - 1540134081620

thread-1 - service3釋放鎖 - 463511790751518

thread-1 - service2 釋放鎖 - 463511790895718

thread-1 - service1 釋放鎖 - 463511791731904

thread-3 - service1 獲取鎖 - 463511792423465

thread-3 - service1 - 1540134081622

thread-3 - service2 獲取鎖 - 463516794723832

thread-3 - service2 - 1540134086625

thread-3 - service3 獲取鎖 - 463516794978527

thread-3 - service3 - 1540134086625

thread-3 - service3釋放鎖 - 463516795099263

thread-3 - service2 釋放鎖 - 463516795154724

thread-3 - service1 釋放鎖 - 463516795207199

thread-2 - service1 獲取鎖 - 463516796485370

thread-2 - service1 - 1540134086627

thread-2 - service2 獲取鎖 - 463521795939716

thread-2 - service2 - 1540134091627

thread-2 - service3 獲取鎖 - 463521796082209

thread-2 - service3 - 1540134091627

thread-2 - service3釋放鎖 - 463521796205930

thread-2 - service2 釋放鎖 - 463521796272484

thread-2 - service1 釋放鎖 - 463521796344157

synchronized 鎖的重入

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

synchronized鎖重入問題

先說結論 乙個執行緒得到了乙個物件的方法後,還可以呼叫這個物件的其他加鎖的方法,乙個執行緒執行在進入了子類的方法後,還可以呼叫父類的加鎖方法。如下面所示 package com.lydon.thread public class syncdubbo public synchronized void ...

synchronized鎖的重入問題

我們知道通過synchronized關鍵字修飾的方法或 塊在同一時刻只能被乙個執行緒訪問,還有一種就是鎖的重入問題,就是乙個執行緒可以訪問多個被synchronized修飾的方法或 塊,如下 package com.xiayc.sync public class reentrantsynchroni...