Synchronized對象鎖和類鎖

  1. 簡單的來說, Synchronized 如果作爲方法, 那麼鎖的粒度是 實例對象
  2. static Synchronized 作爲方法, 那麼鎖的粒度是 類 不同實例 也會被限制, A.invoke() B.invoke() 不能同時訪問
pulbic class Something(){  
    public synchronized void isSyncA(){}  
    public synchronized void isSyncB(){}  
    public static synchronized void cSyncA(){}  
    public static synchronized void cSyncB(){}  
}  

a. x.isSyncA()與x.isSyncB()   
b. x.isSyncA()與y.isSyncA()  
c. x.cSyncA()與y.cSyncB()  
d. x.isSyncA()與Something.cSyncA()  

A. 相同對象訪問不同的 synchronized 方法, 不可同時訪問
B. 不同對象訪問相同synchronized 方法 可以同時訪問,因爲是不同實體類
C. 因爲是 static synchronized 相當於類Something.cSyncA() 和 Something.cSyncB() 不可同時訪問
D. 一個是類鎖 一個是對象鎖, 不是相同實例 可以訪問

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