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(); } } }
创建唯一订单号,真的不重复 JMeter 亲测
最新推荐文章于 2022-10-23 15:35:12 发布