2013-07-29 36 views
4

是否可以在塊檢測到對象不爲空時進行鎖定。 它的某種最佳努力嘗試同步。 我可以編寫代碼這種方式,但似乎有點冗長:在可能的情況下同步化了一個對象

if (lock_object != null) 
{ 
    synchronized(lock_object) { 
     doSomething(); 
    } 
} 
else 
{ 
    doSomething(); 
} 

有結構化的代碼更好的辦法? TKS!

+1

請注意,您的代碼包含對'lock_object'的非同步訪問,因此不是線程安全的! –

+0

@ ErnestFriedman-Hill我的意思是我需要盡最大努力嘗試同步 – delita

+2

如果'lock_object'在'if'和'synchronized'語句之間變爲'null'會發生什麼? – MadProgrammer

回答

0

如你所說:

同步只要檢測對象的塊不爲空

我想你最好使用而爲:

while(lock_object != null){ 

    synchronized(lock_object) { 
     // your not null activities 
    } 

} 
// your null activities 
+0

其實我的意思是我需要「盡力而爲」嘗試同步 – delita

1

這是可能,但沒有意義。方法doSomething讀取/寫入一些數據,例如方法所屬對象的字段。最明顯和可靠的方法是聲明方法doSomething同步,以及可以從不同線程調用的所有其他方法。同步塊僅用於優化,新手程序員應避免使用它。至於「盡力而爲」,編程方面的最大努力意味着不低於可靠和經過驗證的功能。所有其他「努力」並不是最好的,包括你的代碼。

相關問題