フロー番号生成

1971 ワード

生成結果:201311220001(後4桁増加)
 
import java.text.SimpleDateFormat;      
import java.util.Date;      
import java.util.Random;  


public class Test {

	private static int serialNumber = -1;	    // 
	private static String serialDate = "-1"; 	// 
	
	/**
	 *  ,  201301010001  
	 *  ,  9999  , ( ), 
	 */
	public static synchronized String newSerialNumber(){
		if(serialNumber == -1 || serialDate.equals("-1")){
			//load from datasource
			serialDate = "20121212";
			serialNumber = 0;
		}
		String todayStr = new SimpleDateFormat("yyyyMMdd").format(new Date());
		if(!serialDate.equals(todayStr)){
			serialDate = todayStr;
			serialNumber = 0;
		}
		
		StringBuilder targetStr = new StringBuilder(serialDate);
		for(int i = String.valueOf(++serialNumber).length(); i < 4; i++){
			targetStr.append("0");
		}
		targetStr.append(serialNumber);
		System.out.println(Thread.currentThread().getName()+" : "+targetStr.toString());
		return targetStr.toString();
	}
	
	 public static void main(String[] args) {
		// , , 
        for(int i=0; i<1000; i++){      
            new Thread(new Runnable() {      
                @Override      
                public void run() {
                    try {      
                        Thread.sleep((int)Math.random()*1000);      
                    } catch (InterruptedException e) {      
                        e.printStackTrace();      
                    }      
                    newSerialNumber();      
                }      
            }).start();      
        }
		
    }  


}

 
 
コードシミュレーション1000スレッドで同時テストを行い、結果を予想される順序で表示します.