2013-07-29 38 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同步,以及可以从不同线程调用的所有其他方法。同步块仅用于优化,新手程序员应避免使用它。至于“尽力而为”,编程方面的最大努力意味着不低于可靠和经过验证的功能。所有其他“努力”并不是最好的,包括你的代码。

相关问题