フロー番号生成
1971 ワード
生成結果:201311220001(後4桁増加)
コードシミュレーション1000スレッドで同時テストを行い、結果を予想される順序で表示します.
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スレッドで同時テストを行い、結果を予想される順序で表示します.