package com.ruoyi.jianguan.util;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
public class SequenceGenerator {
|
private final ConcurrentHashMap<Long, AtomicInteger> counterMap = new ConcurrentHashMap<>();
|
|
public synchronized String getNextSequence() {
|
long currentTimestamp = System.currentTimeMillis() / 1000; // 获取当前秒级时间戳
|
|
AtomicInteger counter = counterMap.get(currentTimestamp);
|
if (counter == null) {
|
counter = new AtomicInteger(1); // 新的一秒,初始化计数器为1
|
counterMap.put(currentTimestamp, counter);
|
} else {
|
counter.incrementAndGet(); // 同一秒内,计数器递增
|
}
|
|
// 生成四位序列号
|
String sequence = String.format("%04d", counter.get());
|
|
return sequence;
|
}
|
|
public static void main(String[] args) {
|
SequenceGenerator generator = new SequenceGenerator();
|
|
// 测试生成多个序列号
|
for (int i = 0; i < 10; i++) {
|
System.out.println(generator.getNextSequence());
|
try {
|
Thread.sleep(100); // 模拟同一秒内的多次调用
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
|
// 模拟进入新的一秒
|
try {
|
Thread.sleep(1100); // 等待超过1秒
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
|
// 再次生成序列号
|
for (int i = 0; i < 10; i++) {
|
System.out.println(generator.getNextSequence());
|
try {
|
Thread.sleep(100); // 模拟同一秒内的多次调用
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|