创建唯一订单号,真的不重复 JMeter 亲测

package com.rongchang.ziling.game.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 高并发情况下获取订单号
 *
 * @author liuhongbing
 *
 */
public final class OrderUtil {

   private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
   private static final AtomicInteger atomicInteger = new AtomicInteger(1000000);

   /**
    * 创建不连续的订单号
    *
    * @param no 数据中心编号
    * @return 唯一的、不连续订单号
    */
   public static synchronized String getOrderNoByUUID(String no) {
      Integer uuidHashCode = UUID.randomUUID().toString().hashCode();
      if (uuidHashCode < 0) {
         uuidHashCode = uuidHashCode * (-1);
      }
      String date = simpleDateFormat.format(new Date());
      return no + date + uuidHashCode;
   }

   /**
    * 获取同一秒钟 生成的订单号连续
    *
    * @param no 数据中心编号
    * @return 同一秒内订单连续的编号
    */
   public static synchronized String getOrderNoByAtomic(String no) {
      atomicInteger.getAndIncrement();
      int i = atomicInteger.get();
      String date = simpleDateFormat.format(new Date());
      return no + date + i;
   }
   public static void main(String[] args) {
      // 测试多线程调用订单号生成工具
            try {
               for (int i = 0; i < 200; i++) {
                  Thread t1 = new Thread(new Runnable() {
                     public void run() {
                        String aa=OrderUtil.getOrderNoByUUID("");
                            System.out.println(aa);
                     }
                  }, "at" + i);
                  t1.start();

                  Thread t2 = new Thread(new Runnable() {
                     public void run() {
                        String aa=OrderUtil.getOrderNoByUUID("");
                System.out.println(aa);
                     }
                  }, "bt" + i);
                  t2.start();
               }
            } catch (Exception e) {
               e.printStackTrace();
            }

         }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值