package test;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.concurrent.atomic.AtomicInteger;
public class IdTest {
private AtomicInteger count = new AtomicInteger(1);
private static final String JOBTBL_RECORD_ID = "D";
private static final String PROCESS_ID = "EBD01";
private Timestamp now = getSystemTimestamp();
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
IdTest idTest = new IdTest();
// idTest.putong();
idTest.xianCheng();
System.out.println(idTest.getJobRequestId());
}
//普通の方法
public void putong() {
for (int i = 1; i <= 999; i++) {
if (i < 10) {
System.out.println("00" + i);
} else if (i >= 100) {
System.out.println(i);
} else
System.out.println("0" + i);
}
}
//スレッドセーフ方法
public void xianCheng() {
AtomicInteger count = new AtomicInteger(0);
for (; (count.getAndIncrement()) < 999;) {
if (count.get() < 10) {
System.out.println("00" + count);
} else if (count.get() >= 100) {
System.out.println(count);
} else
System.out.println("0" + count);
}
}
private String getJobRequestId() {
StringBuilder builder = new StringBuilder();
StringBuilder num = new StringBuilder();
// 3桁の数字の採番処理。999になった場合は001から採番すること。
if (count.get() > 999) {
count = new AtomicInteger(1);
}
// 3桁の数字を採番処理。
if (count.get() < 10) {
num.append("00").append(count.getAndIncrement());
} else if (count.get() >= 100) {
num.append(count.getAndIncrement());
} else {
num.append("0").append(count.getAndIncrement());
}
// ジョブリクエストID日時部分.
SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String date = format2.format(now);
// 組み合わせる。
builder.append(JOBTBL_RECORD_ID);
builder.append(date);
builder.append(PROCESS_ID);
builder.append(num);
return builder.toString();
}
/**
* システム日時取得する.
*
* @return Current system timestamp.
*/
private Timestamp getSystemTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
}