2012-04-16 30 views
1

這似乎很明顯,但我想確保我正確執行此操作。如果我試圖獲得對空引用的鎖定,這將無法正確工作?因爲它使用對象的屬性而不是引用?使用對象引用作爲互斥鎖

Object lock = null; 

synchronized(lock) 
{ 
} 

回答

4

如果我試圖獲得對空引用的鎖這將無法工作正確嗎?

這是正確的。如果您嘗試使用null進行同步,您將獲得NullPointerException

因爲它使用對象的屬性而不是引用?

不完全是。鎖定狀態不是正常意義上的屬性,因爲您無法對其進行查詢。但是,是的,國家是對象的一部分。如果是,你將如何在this上同步或作爲參數傳遞的對象引用?引用是作爲副本傳遞的...並且對一個副本的更改不能傳播給其他人,並且如果鎖定狀態不能傳播,那麼具有它們自己的參考副本的兩個線程無法以任何有意義的方式進行同步。)

+0

鎖狀態通常表示(部分)在對象的頭部,儘管這取決於實現。 JIT編譯器將發出在鎖定或釋放鎖定時實現所需語義的本機指令。這些也是實施相關的。 – 2013-09-17 16:01:04

3

是。同步在對象本身上。