0 0

加锁取流水号有重复现象求解3

代码本地自己测试正常,正式环境 偶尔出现取编号重复求解
private  static long campaginNo=0  ; //营销编号-CP
	/*为了提高效率,保证每种业务使用不使用相同的时间变量,从而不共用同一锁*/
	private  static String CPDate="";  //当前的系统时间
	/*为了提高效率,保证每个业务获取编号时不使用同一个锁给每个业务定义了个专门的锁*/
	private  static final Lock cplock=new ReentrantLock(); //CP锁对象    
     
	public static String GetBussinessNo(String bussType){
		String bussinessNo = "CP" + getCPNo();
		return bussinessNo;
	}
	private static  String getCPNo(){
		String tempno="99999";
		try {
			cplock.lock();
			String datestr=new SimpleDateFormat("yyyyMMddHHmm").format(new Date());
			if(datestr.equals(CPDate)){
				campaginNo++;
			}else if("".equals(CPDate)){
				CPDate=datestr;
				campaginNo=0;
			}else if(Integer.parseInt(CPDate.substring(6))>Integer.parseInt(datestr.substring(6))){
				campaginNo++;
			}else{
				CPDate=datestr;
				campaginNo=0;
			}
			tempno=CPDate+TestVolatile1.leftAppendChr(campaginNo+"", 5);
			
		} catch (RuntimeException e) {
			e.printStackTrace();
		}finally{
			cplock.unlock();
		}
		return tempno;
	}
	public	static  String leftAppendChr(String s,int length ){
		if( s == null ){
			s="";
		}		
		if( s.length() >length ){
			return s.substring(0,length);
		}		
		while( s.length() < length ){
			s = "0"+s;
		}		
		return s;
	}


没人回答吗?
2012年3月28日 15:54
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics