美文网首页
生成无重复订单号

生成无重复订单号

作者: 骑着家雀吃辣条 | 来源:发表于2020-05-06 11:04 被阅读0次

package com.payboot.tool.makeno;

import java.text.SimpleDateFormat;

import java.util.Date;

/**

* @Author: 张学涛19931514153

* @Date: 2020-05-06 09:38

* @Version 1.0 为解决之前支付中心生成重复订单号的问题创建

*/

public class MakeOrderNum {

/**

* 锁对象,可以为任意对象

*/

    private static ObjectlockObj ="lockerOrder";

/**

* 订单号生成计数器

*/

    private static long orderNumCount =0L;

/**

* 每毫秒生成订单号数量最大值

*/

    private int maxPerMSECSize=1000;

/**

* 生成非重复订单号,理论上限1毫秒1000个,可扩展

    * @param tname 添加特殊前缀标识

*/

    public String makeOrderNum(String tname) {

// 最终生成的订单号

        String finOrderNum ="";

try {

synchronized (lockObj) {

// 取系统当前时间作为订单号变量前半部分,精确到毫秒

                long nowLong = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));

// 计数器到最大值归零,可扩展更大,目前1毫秒处理峰值1000个,1秒100万

                if (orderNumCount >=maxPerMSECSize) {

orderNumCount =0L;

}

//组装订单号

                String countStr=maxPerMSECSize +orderNumCount+"";

finOrderNum=nowLong+countStr.substring(1);

orderNumCount++;

System.out.println(finOrderNum +"--" + Thread.currentThread().getName() +"::" + tname );

// Thread.sleep(1000);

                return finOrderNum;

}

}catch (Exception e) {

e.printStackTrace();

}

return finOrderNum;

}

  public static void main(String[] args) {  

        // 测试多线程调用订单号生成工具  

        try {  

            for (int i = 0; i < 200; i++) {  

                Thread t1 = new Thread(new Runnable() {  

                    public void run() {  

                        MakeOrderNum makeOrder = new MakeOrderNum();  

                        makeOrder.makeOrderNum("a");  

                    }  

                }, "at" + i);  

                t1.start();  

                Thread t2 = new Thread(new Runnable() {  

                    public void run() {  

                        MakeOrderNum makeOrder = new MakeOrderNum();  

                        makeOrder.makeOrderNum("b");  

                    }  

                }, "bt" + i);  

                t2.start();  

            }  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}

相关文章

网友评论

      本文标题:生成无重复订单号

      本文链接:https://www.haomeiwen.com/subject/rfmightx.html