单例模式生成订单编号

package com.jeeplus.modules.biz.util;

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

/** * 单例模式 * 生成订单编号 */public class SingletonUtil {    private volatile static  SingletonUtil singletonUtil;    private SingletonUtil(){}    public static SingletonUtil getSingletonUtil(){        if (singletonUtil == null){            synchronized (SingletonUtil.class){                if(singletonUtil==null){                    singletonUtil = new SingletonUtil();                }            }        }        return singletonUtil;    }

/**     * 生成编号     * @param prefix     * @return     */    public String makeOrderNum(String prefix){        SimpleDateFormat simpleDateFormat;        simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");        Date date = new Date();        String str =prefix + "-" + simpleDateFormat.format(date);        Random random = new Random();        int ranNum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 获取5位随机数        System.out.println("生成订单号:"+str + ranNum);        return str + ranNum;// 当前时间    }

/**     * 测试     * @param args     */    public static void main(String[] args) {        // 测试多线程调用订单号生成工具        try {            for (int i = 0; i < 100; i++) {                Thread t1 = new Thread(new Runnable() {                    public void run() {                        SingletonUtil makeOrder = new SingletonUtil();                        String prefix="HD";                        makeOrder.makeOrderNum(prefix);                    }                }, "at" + i);                t1.start();

Thread t2 = new Thread(new Runnable() {                    public void run() {                        SingletonUtil makeOrder = new SingletonUtil();                        String prefix="AB";                        makeOrder.makeOrderNum(prefix);                    }                }, "bt" + i);                t2.start();            }        } catch (Exception e) {            e.printStackTrace();        }    }}

原文地址:https://www.cnblogs.com/duanqiao123/p/8717541.html

时间: 2024-10-13 04:57:50

单例模式生成订单编号的相关文章

Java秒杀系统实战系列~分布式唯一ID生成订单编号

摘要: 本篇博文是"Java秒杀系统实战系列文章"的第七篇,在本博文中我们将重点介绍 "在高并发,如秒杀的业务场景下如何生成全局唯一.趋势递增的订单编号",我们将介绍两种方法,一种是传统的采用随机数生成的方式,另外一种是采用当前比较流行的"分布式唯一ID生成算法-雪花算法"来实现. 内容: 在上一篇博文,我们完成了商品秒杀业务逻辑的代码实战,在该代码中,我们还实现了"当用户秒杀成功后,需要在数据库表中为其生成一笔秒杀成功的订单记录&qu

生成订单编号的工具类

package com.qiyuan.util; import java.text.SimpleDateFormat; import java.util.Date; public class orderCode { //订单编号前缀 public static final String PREFIX = "DD"; //订单编号后缀(核心部分) private static long code; // 生成订单编号 public static synchronized String g

mysql生成订单编号函数

DROP TABLE IF EXISTS `order_seq`;CREATE TABLE `order_seq` ( `timestr` int(11) NOT NULL, `order_sn` int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; DROP FUNCTION order_seq; create function order_seq() returns integerbegin declare v_cnt integer;

mysql 生成流水号 存储过程 订单编号

用存储过程生成流水号是很常用的,这里以生成订单编号的流水号作为示例.(新的一天的流水号从1开始,如:今天的订单编号是CD2013010900014,下一个订单编号将是CD2013010900015:明天的订单编号将从CD2013011000001开始) 生成规则:    2位前缀+年月日+5位流水号     或者 2位前缀+年月日时分+5位流水号     或者 2位前缀+年月日时分秒+5位流水号. 测试订单表(test_orders): 1 CREATE TABLE `test_orders`

生成订单:三个表(Products,Orders,OrderItem)

1.有三个表(Product上,Orders,OrderItem) 分别创建对应的三个实体类 OrderItem中有外键Order_id 参考Orders中的id :Product_id参考Product中的id:Orders中有外键User_id参考User中的id sql 代码: CREATE DATABASE day2017_04_05; USE day2017_04_05; CREATE TABLE `user` ( `id` INT(11) AUTO_INCREMENT, `usern

estore商城案例(四、五)------添加购物车&amp;购物车显示/生成订单&amp;在线支付

一.添加购物车 1.获得商品id提交到servlet程序 2.根据id获取product对象 3.判断seesion中是否有存在购物车session.没有的话表示  添加的第一件商品  需要先创建session:有的话直接在session里添加获得的produce(添加product 要先判断session中是否存在对应的商品,存在话直接修改商品数量,没有的话新添加这个商品). servlet程序代码: 1 public void doGet(HttpServletRequest request

网上图书商城项目学习笔记-018生成订单

一.流程分析 1.订单模块介绍 2.生成订单流程 二.代码 1.view层 (1)showitem.jsp 1 <form id="form1" action="<c:url value='/OrderServlet'/>" method="post"> 2 <input type="hidden" name="cartItemIds" value="${cartIt

PHP生成唯一编号 36进制不重复编号

PHP实现生成唯一编号,文中使用10进制转换36进制得到不重复的6000多万个唯一编号,编号位数为10位. 当要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号.我们将0-Z(0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ)分别代表数值0-35,如字母Z代表35.这样的话我要得到一个5位的编号,最大信息量就是36的5次方了,36^5 = 60466176,即最大的

按规则自动生成单据编号 以及并发问题

描述:每种单据新建时,自动生成它的单据编号. 规则如:固定码+日期+流水号 (ABC1603180001) 方法一:触发器 触发器的缺点是,执行了sql之后才看到编码. 测试:流水号不能超过最大数,否则后面的号码全是0 --有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始 --项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号