是否可以在塊檢測到對象不爲空時進行鎖定。 它的某種最佳努力嘗試同步。 我可以編寫代碼這種方式,但似乎有點冗長:在可能的情況下同步化了一個對象
if (lock_object != null)
{
synchronized(lock_object) {
doSomething();
}
}
else
{
doSomething();
}
有結構化的代碼更好的辦法? TKS!
是否可以在塊檢測到對象不爲空時進行鎖定。 它的某種最佳努力嘗試同步。 我可以編寫代碼這種方式,但似乎有點冗長:在可能的情況下同步化了一個對象
if (lock_object != null)
{
synchronized(lock_object) {
doSomething();
}
}
else
{
doSomething();
}
有結構化的代碼更好的辦法? TKS!
如你所說:
同步只要檢測對象的塊不爲空
我想你最好使用而爲:
while(lock_object != null){
synchronized(lock_object) {
// your not null activities
}
}
// your null activities
其實我的意思是我需要「盡力而爲」嘗試同步 – delita
這是可能,但沒有意義。方法doSomething
讀取/寫入一些數據,例如方法所屬對象的字段。最明顯和可靠的方法是聲明方法doSomething
同步,以及可以從不同線程調用的所有其他方法。同步塊僅用於優化,新手程序員應避免使用它。至於「盡力而爲」,編程方面的最大努力意味着不低於可靠和經過驗證的功能。所有其他「努力」並不是最好的,包括你的代碼。
請注意,您的代碼包含對'lock_object'的非同步訪問,因此不是線程安全的! –
@ ErnestFriedman-Hill我的意思是我需要盡最大努力嘗試同步 – delita
如果'lock_object'在'if'和'synchronized'語句之間變爲'null'會發生什麼? – MadProgrammer