订单号/序列号生成常用方案

本文介绍了单例模式下的懒汉模式生成订单号示例,以及Twitter开源的Snowflake算法在高并发场景下的应用,分析了两者在生成全局唯一ID方面的性能和特点。同时提及了其他相关插件如百度uid-generator、美团leaf和滴滴tiinyid。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例(懒汉模式)

主要是使用时间,生成年月日加自增数,每毫秒最多可以生成9999个订单,当然这个是可以配置的,根据现实业务情况进行定义。下面来看代码:

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 生成订单号类
 */
public class GenerateNum {
   
    // 使用单例模式,不允许直接创建实例
    private GenerateNum() {
   }

    // 创建一个空实例对象,类需要用的时候才赋值
    private static GenerateNum g = null;

    // 单例模式--懒汉模式
    public static synchronized GenerateNum getInstance() {
   
        if (g == null) {
   
            g = new GenerateNum();
        }
        return g;
    }

    // 全局自增数
    private static int count = 0;

    // 每毫秒秒最多生成多少订单(最好是像9999这种准备进位的值)
    private static final int total = 9999;

    // 格式化的时间字符串
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    // 获取当前时间年月日时分秒毫秒字符串
    private static String getNowDateStr() {
   
        return sdf.format(new Date());
    }

    // 记录上一次的时间,用来判断是否需要递增全局数
    private static String now = null;

    /*
     * 生成一个订单号
     */
    public synchronized String GenerateOrder() {
   
        String datastr = getNowDateStr();
        if (datastr.equals(now)) {
   
            count++;// 自增
        } else {
   
            count = 1;
            now = datastr;
        }
        int countInteger = String.valueOf(total).length() - String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值