同步:
public CodeCountryDataEntity getCountryCodeData(String code) throws FileProcessingException {
CodeCountryDataEntity codeCountryDataEntity = null;
if (CodeCountryDataManager.engine.isInited()) {
codeCountryDataEntity = CodeCountryDataManager.engine.getCodeData(code);
return codeCountryDataEntity;
}
log.info("[ DATA CODE CODE INIT.. ]");
syncCodeCountryData(); // synchronized..
codeCountryDataEntity = CodeCountryDataManager.engine.getCodeData(code);
return codeCountryDataEntity;
}
private synchronized void syncCodeCountryData() throws FileProcessingException {
if (CodeCountryDataManager.engine.isInited()) {
return;
}
List<CodeCountryDataEntity> data = managementDatabaseService.getCodeCountryDataValue();
if (data != null && !data.isEmpty()) {
log.info("[ CODE DATA DOWNLOADING.. ]");
CodeCountryDataManager.engine.inited(data);
} else {
throw new FileProcessingException(Constants.ECODE_DATASYNC_MISSPRSCODE);
}
}
单例:
public enum CodeCountryDataManager {
engine;
Map<String, CodeCountryDataEntity> codeCountryDataMap = new HashMap<String, CodeCountryDataEntity>();
public boolean isInited() {
if (codeCountryDataMap == null) {
return false;
}
if (codeCountryDataMap.isEmpty()) {
return false;
}
return true;
}
public void inited(List<CodeCountryDataEntity> list) {
if (list != null && !list.isEmpty()) {
for (CodeCountryDataEntity codeCountryDataEntity : list) {
if (codeCountryDataEntity.getCodevalue() != null) {
codeCountryDataMap.put(codeCountryDataEntity.getCodetype() + codeCountryDataEntity.getCodevalue(), codeCountryDataEntity);
} else if (codeCountryDataEntity.getCodevalue_old()!= null) {
if(codeCountryDataMap.get(codeCountryDataEntity.getCodetype() + codeCountryDataEntity.getCodevalue_old()) == null) {
codeCountryDataMap.put(codeCountryDataEntity.getCodetype() + codeCountryDataEntity.getCodevalue_old(), codeCountryDataEntity);
}
}
}
}
}
public CodeCountryDataEntity getCodeData(String code) {
if (this.isInited()) {
return codeCountryDataMap.get(code);
}
return null;
}
}
静态内部类:Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。
public class SingletonDemo5 {
private static class SingletonHolder{
private static final SingletonDemo5 instance = new SingletonDemo5();
}
private SingletonDemo5(){}
public static final SingletonDemo5 getInsatance(){
return SingletonHolder.instance;
}
}