自增序列生成

生成毫秒数+3位自增:

1
2
3
4
5
6
7
8
9
10
11
12
13
private static AtomicLong sequence = new AtomicLong();

public static String generSeq() {
for (; ; ) {
long oldSeq = sequence.get();
long curMS = System.currentTimeMillis() * 1000;

long newSeq = curMS > oldSeq ? curMS : oldSeq + 1;
if (sequence.compareAndSet(oldSeq, newSeq)) {
return String.valueOf(newSeq);
}
}
}

生成yyyyMMddHHmmssSSS+2位自增:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
private static AtomicLong lastSeq = new AtomicLong();
public static String generSeqStr() {
for (; ; ) {
long oldSeq = lastSeq.get();
String curDate = LocalDateTime.now().format(DATE_TIME_FORMATTER);
long seq = Long.valueOf(curDate) * 100;// *1000会越界

long newSeq = seq > oldSeq ? seq : oldSeq + 1;
if (lastSeq.compareAndSet(oldSeq, newSeq)) {
return String.valueOf(newSeq);
}
}
}