单例+同步

同步:

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;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值