唯一ID生成_Java实现

发布时间 2024-01-02 12:19:26作者: ashet

最近在接入接口时,需要提供一个客户端生成的唯一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);
    } 
}