是否可以在块检测到对象不为空时进行锁定。 它的某种最佳努力尝试同步。 我可以编写代码这种方式,但似乎有点冗长:在可能的情况下同步化了一个对象
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