2009-06-25 45 views
2

我在想,如果的Java圍繞鎖同步聲明

synchronize (lock) { 
    ... 
} 

如果鎖是java.util.concurrent.locks.Lock一個實例,把lock像任何其他對象或作爲嘗試,終於成語即

lock.lock(); 
try { 
    ... 
} finally { 
    lock.unlock(); 
} 

回答

13

Lock documentation

請注意,鎖定實例只是 normal ob並且它們本身可以被 用作同步 聲明中的目標。獲取Lock實例的監視器鎖 沒有指定 與調用該實例的任何 lock()方法的關係。建議您爲 建議避免混淆 您絕對不要在此 方式中使用鎖定實例,除非在其自己的 實現中。

所以基本上,它被視爲任何其他對象。而且,不要這樣做。

+0

爲什麼「不這樣做」? – hhafez 2009-06-25 21:07:54

+2

@hhafez:「不要這樣做」,因爲文檔中提到「爲避免混淆,建議您不要以這種方式使用Lock實例,除非在他們自己的實現中。」 – 2009-06-25 21:12:37

3

它會像對待任何其他對象一樣對待鎖。

-1

C#編程語言中的lock語句可以用於一次只對一個線程限制對特定部分代碼的訪問。