是否可以在检测到对象非空锁定时同步块。 它尝试同步的某种最佳努力。 我可以用这种方式编写代码,但看起来有点冗长:
if ( lock_object != null )
{
synchronized(lock_object) {
doSomething();
}
}
else
{
doSomething();
}
是否有更好的方法来构建此代码?
答案 0 :(得分:1)
这是可能的,但没有任何意义。方法doSomething
读取/写入一些数据,比如方法所属的对象的字段。最明显和最可靠的方法是声明方法doSomething
已同步,以及可以从不同线程调用的所有其他方法。同步块仅用于优化,新手程序员应避免使用它。
至于“尽力而为”,编程的最大努力意味着可靠且经过验证的功能。所有其他“努力”都不是最好的,包括你的代码。
答案 1 :(得分:0)
正如你所说:
每当检测到对象不为空时同步一个块
我认为你最好在以下时使用:
while( lock_object != null ){
synchronized(lock_object) {
// your not null activities
}
}
// your null activities