查看本章节

查看作业目录


需求说明:

模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单

现在简单模拟 5 个订单同时提交,生成唯一订单编号的场景。订单编号的生成规则是以毫秒为单位的当前时间+订单序号

例如,当前时间的毫秒数是 150000,那第 1 笔订单的编号就是 1500001,第 9 笔订单的编号就是 1500009

实现思路:

项目中创建订单类 Order(订单编号、订单金额、下单用户)

创建订单处理类 ProcessOrder实现Runnable接口,定义Order类型的成员变量和一个Integer静态count作为订单序号(初始1),同时添加产生订单号的方法

产生订单号方法中使用sleep延迟500毫秒,同时添加同步代码块,指定静态变量 count 为同步监视器,同步代码块内则采用系统时间毫秒和订单序号生成订单号操作

在同步代码块外,把订单用户、订单金额和订单编号打印输出

创建测试启动类 TestOrder。在该类的 main() 方法内,使用有参构造方法实例化 5 个 Order 对象。使用ProcessOrder(Order order) 构造方法,实例化 5 个 ProcessOrder 类的对象,并把 5 个 Order 对象依次传给构造方法的参数 order。分别创建5个Thread对象依次传入5个ProcessOrder,启动测试

实现代码:

订单类(Order)


public class Order {
//订单编号
private String orderNumber;
//订单金额
private double orderAmount;
//用户名称
private String username;
//无参构造
public Order() {
super();
}
//有参构造
public Order(String orderNumber, double orderAmount, String username) {
super();
this.orderNumber = orderNumber;
this.orderAmount = orderAmount;
this.username = username;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public double getOrderAmount() {
return orderAmount;
}
public void setOrderAmount(double orderAmount) {
this.orderAmount = orderAmount;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
} }

订单处理类(ProcessOrder)


public class ProcessOrder implements Runnable{
private Order order;
//订单计数器
private static Integer count = 1; public ProcessOrder(Order order) {
this.order = order;
} @Override
public void run() {
generateOrderNumber();
} public void generateOrderNumber() {
try {
//加入线程延迟
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//同步监听器是count变量
synchronized (count) {
//生成订单编号
StringBuffer orderNumber = new StringBuffer("").append(System.currentTimeMillis()).append(count++);
//将订单编号保存到订单对象中
order.setOrderNumber(orderNumber.toString());
}
System.out.printf("%s的订单金额是%.2f元,订单编号是:%s\n",order.getUsername(),order.getOrderAmount(),order.getOrderNumber());
} }

启动运行类(TestOrder)


public class TestOrder {
public static void main(String[] args) {
//实例化5个订单对象
Order order1 = new Order(null,300,"张三");
Order order2 = new Order(null,400,"李四");
Order order3 = new Order(null,500,"王五");
Order order4 = new Order(null,300,"赵六");
Order order5 = new Order(null,200,"秦七");
//实例化5个Runnable对象
ProcessOrder processOrder1 = new ProcessOrder(order1);
ProcessOrder processOrder2 = new ProcessOrder(order2);
ProcessOrder processOrder3 = new ProcessOrder(order3);
ProcessOrder processOrder4 = new ProcessOrder(order4);
ProcessOrder processOrder5 = new ProcessOrder(order5);
//实例化5条线程
Thread thread1 = new Thread(processOrder1);
Thread thread2 = new Thread(processOrder2);
Thread thread3 = new Thread(processOrder3);
Thread thread4 = new Thread(processOrder4);
Thread thread5 = new Thread(processOrder5);
//依次启动线程
thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();
}
}

编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。的更多相关文章

  1. 编写Java程序_连锁超市购物结算系统

    目录 功能需求: 一.Use Case 1 显示商品信息列表: 二.Use Case 2 输入购买商品编号 三.Use Case 3 显示购物结算清单 需求分级: 实现代码: 功能需求: Soft f ...

  2. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

  3. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...

  4. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  5. 初学编写JAVA程序

    一.编写JAVA程序 编写JAVA程序,输出一行文本信息:“Hello world”,选择编辑器eclipse,打开之后编写程序 public class Hello{ public static v ...

  6. Java初学者作业——使用记事本编写Java程序

    返回本章节 返回作业目录 需求说明: 使用记事本编写 Java 程序,输出"大家好!我的梦想是做一名 Java 高级工程师!". 为 Java 程序添加单行和多行注释以及文档注释. ...

  7. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

  8. Java初学者作业——编写Java程序,根据输入的某个班级的学员成绩,计算该班级学员的平均成绩,要求输入班级的人数。

    返回本章节 返回作业目录 需求说明: 编写Java程序,根据输入的某个班级的学员成绩,计算该班级学员的平均成绩,要求输入班级的人数. 实现思路: 声明变量sum.count以及avg用于存储总成绩.班 ...

  9. Java初学者作业——编写Java程序,输入一个数字,实现该数字阶乘的计算。

    返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4* ...

随机推荐

  1. 案例分析 CAN OPEN 调试记录 进度

    2020.12.29 发现一片博客:https://blog.csdn.net/harrycomeon/article/details/94650103 需要一个硬件:CAN分析仪,网上200元左右. ...

  2. db9串口接头的定义

    这个接头都是以公头为准,所有接头还是以公头去记. RS-232端(DB9公头/针型)引脚定义 2: RXD 3:TXD 5:GND 1/4/6:内部相链接 7/8   :内部相链接 1.RS-232端 ...

  3. Linux基础命令---mysqlshow显示数据库

    mysqlshow mysqlshow是一个客户端的程序,它可以显示数据库的信息.表信息.字段信息. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.   1.语法 ...

  4. LINUX 系统性能检测工具vmstat

    vmstat 有2个参数,第一个是采样时间间隔(单位是s),第二个参数是采样个数. #表示 2s采样一次,一共采样2次 vmstat 2 2 也可以只写第一个参数,让系统一直采样直到停止(ctrl + ...

  5. APP调用系统相册,使用3DTouch重压,崩溃

    崩溃:app调用系统相册,使用3DTouch重压,崩溃 问题描述 app调用系统相册,使用3DTouch重压,一般的app都会崩溃. 解决方法 写个分类即可 @implementation UICol ...

  6. 【编程思想】【设计模式】【创建模式creational】Borg/Monostate

    Python版 https://github.com/faif/python-patterns/blob/master/creational/borg.py #!/usr/bin/env python ...

  7. 【Java多线程】ExecutorService和ThreadPoolExecutor

    ExecutorService Java.util.concurrent.ExecutorService接口代表一种异步执行机制,它能够在后台执行任务.因此ExecutorService与thread ...

  8. 『学了就忘』Linux启动引导与修复 — 72、Linux系统的修复模式(单用户模式)

    目录 1.单用户模式常见的错误修复 2.通过单用户模式修改系统密码 (1)进入grub启动引导程序中 (2)编辑相应的系统启动内容 (3)编辑grub配置文件内容 (4)启动系统 (5)修改root用 ...

  9. Linux内核配置-ARP系列

    all为所有,defalut为默认,其他为接口自己的 如果接口没填写,将会把defalut的值放接口上,实际生效的为all和接口中参数值较大的那个 #arp_ignore arp_ignore的参数含 ...

  10. react功能实现-组件创建

    这里主要从两个角度来分析创建一个组件需要怎么做,一个是元素,一个是数据.整理向,大量借鉴,非原创. 1.渲染组件. 我们先明确一点,所有的元素都必须通过render方法来输出渲染.所有,每个组件类最终 ...