java生成每日归零的递增的流水号
时间: 2023-09-05 13:11:08 浏览: 184
要实现每日归零的递增流水号,可以结合日期和 AtomicInteger 类来生成。示例代码如下:
```
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.atomic.AtomicInteger;
public class DailySerialNumberGenerator {
private static final AtomicInteger sequence = new AtomicInteger(0);
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
private static LocalDate currentDate = LocalDate.now();
public static String getNextSerialNumber() {
LocalDate now = LocalDate.now();
if (!currentDate.equals(now)) { // 如果当前日期已经变更,则重置序列号
synchronized (DailySerialNumberGenerator.class) {
if (!currentDate.equals(now)) {
currentDate = now;
sequence.set(0);
}
}
}
int value = sequence.incrementAndGet();
return currentDate.format(formatter) + String.format("%04d", value);
}
}
```
在这个示例中,我们使用了一个 AtomicInteger 类型的变量 sequence 来保存当前的流水号,初始值为 0。同时,我们使用了一个 currentDate 变量来保存当前日期,初始值为当天日期。每次调用 getNextSerialNumber() 方法时,我们首先判断当前日期是否和保存的 currentDate 相同,如果不同,则说明日期已经变更,需要重置序列号。在重置序列号时,我们使用了 synchronized 关键字来保证多线程安全。最后,我们将日期和序列号拼接起来,生成一个唯一的流水号。
阅读全文