update - 调整下基于时间 ID 的生成器

This commit is contained in:
wangli 2023-12-20 21:04:50 +08:00
parent 2ffa124240
commit 9bfdc6628f

View File

@ -15,8 +15,7 @@ import java.util.concurrent.atomic.AtomicLong;
*/
public class TimeBasedIdGenerator implements IdGenerator {
private static final long SEQUENCE_BITS = 9L;
private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS);
private static final long MAX_SEQUENCE = 1000_000_000L;
private static final AtomicLong sequence = new AtomicLong(0);
private static volatile String lastTimestamp = "";
@ -26,7 +25,7 @@ public class TimeBasedIdGenerator implements IdGenerator {
String timestamp = dateFormat.format(new Date());
if (timestamp.equals(lastTimestamp)) {
long currentSequence = sequence.incrementAndGet() & MAX_SEQUENCE;
long currentSequence = sequence.incrementAndGet() % MAX_SEQUENCE;
if (currentSequence == 0) {
// 如果递增数已达到最大值则等待下一毫秒
timestamp = tilNextTimestamp(timestamp, dateFormat);