最近在接入接口时,需要提供一个客户端生成的唯一ID,因此写了一个简单的唯一ID生成的工具类
public class IdGenerator{
/**
* 使用原子类计数器避免极端情况下的ID重复
*/
private static AtomicInteger counter = new AtomicInteger(0);
/**
* 通过使得每个线程都有自己的SimpleDateFormat实例,确保线程安全
*/
private static ThreadLocal<SimpleDateFormat> dateFormatThreadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMddHHmmss"));
/**
* 唯一ID
* 格式:固定前缀_年月日时分秒_4位UUID+原子类计数器
*/
public static String getId() {
String random = UUID.randomUUID().toString().replaceAll("-", "0").subString(0, 4) + counter.getAndIncrement();
String timestamp = dateFormatThreadLocal.get().format(new Date());
return String.format("ASHE_%s_%s", timestamp, random);
}
}