在java中,解决多线程问题有很多中方式,double null check是一个比较有效的且能避免性能影响的一个好的方式。下面是一个简单的例子:
public Keyed getReferencedObject()
{
if (referencedObject == null && !isClassLevel())
{
return _getReferencedObject();
}
return referencedObject;
}
private synchronized Keyed _getReferencedObject()
{
if (referencedObject == null && !isClassLevel())
{
try
{
referencedObject = getServerImpl().getObjectManager(
getObjectType()).getObject(
getObjectKey());
}
catch (DatasweepException e)
{
EventLog.logException(e,this,"getReferencedObject(" + getObjectTypeName() + ", " + getObjectKey() + ")");
}
}
return referencedObject;
}