Java-根据前缀-日期-数字-生成流水号(不重复)
为了生成不重复的流水号,您可以使用一个原子引用来安全地递增计数器,并且使用SimpleDateFormat
来格式化日期。以下是一个简单的Java方法,用于生成不重复的流水号:
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;
public class SerialNumberGenerator {
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
private static final AtomicInteger COUNTER = new AtomicInteger(1);
private static final String PREFIX = "SN";
public static String generateSerialNumber() {
String datePart = DATE_FORMAT.format(new Date());
int counterValue = COUNTER.getAndIncrement();
return PREFIX + datePart + String.format("%05d", counterValue);
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println(generateSerialNumber());
}
}
}
这段代码定义了一个SerialNumberGenerator
类,其中的generateSerialNumber
方法将生成格式为SNYYYYMMDDNNNNN
的流水号,其中YYYYMMDD
是当前日期,NNNNN
是当天的递增序列,前缀和日期部分之间填充到5位数。每次调用generateSerialNumber
都会生成一个新的流水号。
请注意,如果您在一个分布式系统中使用这种方法生成流水号,那么需要考虑使用分布式锁或其他同步机制来确保计数器的原子性和唯一性。
评论已关闭