1. 程式人生 > >synchronized鎖的理解

synchronized鎖的理解

對於synchronized,我的理解是相當於為一個物件加上了鎖,只有獲取到該物件的鑰匙即可執行相應的程式碼。(我理解鑰匙相當於物件的控制代碼,一個物件只有一個控制代碼,只有拿到控制代碼開啟鎖才可以執行,執行完成後控制代碼位置還原,其他同步程式碼塊搶到這個控制代碼繼續執行,而其他的執行緒則一直嘗試獲取控制代碼,所以說無論是物件內部的同步程式碼塊還是其他執行緒的同步程式碼塊,若鎖住的是同一物件,則為同步執行)
a.多個synchronized可以鎖住同一個物件,但是隻有一個獲取到物件“”鑰匙“”的可以得到執行。
b.synchronized 修飾方法,相當於
synchronized(this){
}
c.方法裡只有同步程式碼塊裡的程式碼是同步執行的,其他程式碼仍是非同步執行,只不過執行到同步程式碼塊的位置阻塞住了,所以需要注意鎖的位置,不適當的話還是會產生髒讀

細化的三個結論 :
1.當多個執行緒同時執行synchronized(x){}同步程式碼塊是呈同步效果
注 : x為同一個物件

2.當其他執行緒執行x物件中的synchronized同步方法時呈同步效果

3.當其他執行緒執行x物件中的synchronized(x){}同步程式碼塊時也呈現同步效果,但是如果其他執行緒呼叫不加synchronized關鍵字的方法時,還是非同步呼叫