在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;
}