2010-07-25 83 views
4

當你有一個方法,如以下幾點:等同於靜態同步方法的同步塊?

public synchronized void addOne() { 
    a++; 
} 

它等同於以下內容:(糾正我,如果我錯了)

public void addOne() { 
    synchronized(this) { 
     a++; 
    } 
} 

但什麼是等同於以下方法?:

public static synchronized void addOne() { 
    a++; 
    // (in this case 'a' must be static) 
} 

什麼是同步塊作用相同靜態同步方法?我知道靜態同步方法在類上而不是實例上同步(因爲沒有實例),但是它的語法是什麼?

+0

的可能重複的[爪哇同步方法:對對象或類鎖(http://stackoverflow.com/questions/437620/java-synchronized-methods-lock-on-object-or-class) – 2010-07-25 04:04:31

+0

嗯,但該問題沒有Quartermeister指出的代碼片段。我認爲這是非常明顯的,可以在手邊進行。 – Ricket 2010-07-26 02:12:47

回答

10

它相當於鎖定類對象。您可以通過編寫類名後跟.class來獲得對類對象的引用。所以,像這樣:

synchronized(YourClass.class) { 
} 

Java Language Specification, Section 8.4.3.6 synchronized Methods

一個synchronized方法獲取一個鎖 (§17.1)執行之前。對於 類(靜態)方法,與 的Class對象關聯的鎖 使用該方法的類。對於 實例方法,使用與此(調用 方法的對象)關聯的鎖 。