2015-10-16 45 views

回答

0

對於靜態方法,類被鎖定

class A { 
    static synchronized void method() { 

就好了,雖然不是完全一樣

class A { 
    static void method() { 
     synchronized(A.class) { 

在這個病例如果一個線程已經執行此方法,然後沒有其他線程可以調用此方法。
對於實例方法,實例被鎖定。

class A { 
    synchronized void method() { 

是大致相同

class A { 
    void method() { 
     synchronized(this) { 

在這種區分如果有不同的實例對象被初始化然後每個實例一個線程可以進入該執行塊。

注意:這是一種常見的誤解,即該方法存在鎖定或該方法被鎖定。事實並非如此,事實上沒有標準的方法來做到這一點。

+0

如果你確實設法瞭解這個問題,你可以編輯它,讓它變得更清晰 –

+0

@SleimanJneidi問題很明顯,如果這是你正在尋找的答案。我不會經常冷靜下來,但是有些人會降低他們認爲應該知道的基本Java的問題。 –

+0

你說你的第二個例子和你的第一個例子「不完全一樣」,但是在'synchronized'實例方法和一個實例方法之間是否有任何_practical_差異,它的整個主體是一個'synchronized(this)'語句?通過「實際差異」,我不是指通過檢查字節代碼可以看出的東西;我的意思是,是否有任何可以編寫的純Java單元測試可以揭示兩種情況之間的差異。 –

相關問題