java中的synchronized關鍵字

synchronized關鍵字的介紹(參考周志明老師的《深入理解Java虛擬機》):

synchronized關鍵字經過編譯之後,會在同步塊的前後分別形成monitorentermonitorexit這兩個字節碼指令,這兩個字節碼都需要一個reference類型的參數來指明要鎖定和解鎖的對象。如果Java程序中的synchronized明確指定了對象參數,那就是這個對象的reference;如果沒有明確指定,那就根據synchronized修飾的是實例方法還是類方法,去取對應的對象實例或Class對象來作爲鎖對象。

和ReetrantLock比較:

在基本用法上,ReentrantLocksynchronized很相似,他們都具備一樣的線程重入特性,只是代碼寫法上有點區別,一個表現爲API層面的互斥鎖(lock()和unlock()方法配合try/finally語句塊來完成),另一個表現爲原生語法層面的互斥鎖。 不過,相比synchronized,ReentrantLock增加了一些高級功能,主要有以下3項:等待可中斷、 可實現公平鎖,以及鎖可以綁定多個條件。







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