用java 设计一个秒杀系统,200件商品,同时10000人抢,每个人只能抢一件,相关代码请贴出
1.定义商品类,记录商品库存量,以及抢购人数
2.定义秒杀类,初始化200个商品对象,提供一个抢购的方法
3.定义10000个用户线程,在run方法中进行抢购
```java
public class Goods {
// 库存量
private int stock;
// 抢购人数
private int buyCount;
public Goods(int stock){
this.stock = stock;
this.buyCount = 0; // 初始化时未有人抢购 设为0
}
public synchronized void reduceStock(){ // 同步方法保证原子性 防止多人同时修改库存量 造成错误的情况出现
if(stock > 0){ // 如果库存大于0 才能进行减少库存的动作
stock--; // 减少库存量 每一件物品只能有一个用户进行够买
buyCount++; // 每当有一件物品出去时 这件次数加1 用于之后的判断是否所有物品都已经卖光了
System.out.println("剩余" + stock + "件"); // 测试使用 用来显示剩余多少件物品 看看是否都卖光了
}else{ // 如果店面已全部卖光了 进行执行相关逻辑处理 (此处省略)
System.out.println("已全部卖光"); // 测试使用 用来显示是否都卖光了 看看是否都卖光了 } }
public class Seckill { /*定义一个Seckill对象*/ /*初始化200个Goods对象*/ /*并把Goods对象装入List中*/ List<Goods> list = new ArrayList<>(); for(int i=0 ; i<200 ; i++){ Goods goods = new Goods(1); list.add(goods); } /*声明10000个UserThread对象*/ UserThread[] userThreads = new UserThread[10000]; for (int j=0 ; j<userThreads.length ; j++){ userThreads[j] = new UserThread(list); } /*遍历userthread数组并开始执行*/ for (UserThread user : userThreads) { user .start(); }}public class UserThead extends Thread{ private List<Goods> list; public UserThead(){} public UserThead(List<Goods> list){this .list=list;} @Override public void run() { synchronized (list) { Iterator iterator=list .iterator(); while (iterator .hasNext()) { Goods goods=(Goods) iterator .next(); goods .reduceStock(); if (goods .getBuyCount() == 200) {//如果所有物品已全都卖出 break; } }} }}
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!