用java编写一个秒杀礼品系统,可以判用户是否秒杀成功。
时间: 2024-03-26 16:36:14 浏览: 60
基于java的秒杀软件
5星 · 资源好评率100%
好的,以下是一个简单的 Java 秒杀礼品系统的实现,可以判定用户是否秒杀成功:
```java
import java.util.concurrent.ConcurrentHashMap;
public class SeckillSystem {
private static final int MAX_STOCK = 10; // 商品最大库存
private static final ConcurrentHashMap<String, Integer> STOCKS = new ConcurrentHashMap<>(); // 商品库存
private static final ConcurrentHashMap<String, Boolean> LOCKS = new ConcurrentHashMap<>(); // 商品秒杀锁
static {
// 初始化商品库存和秒杀锁
for (int i = 1; i <= MAX_STOCK; i++) {
String itemId = "item" + i;
STOCKS.put(itemId, 1);
LOCKS.put(itemId, false);
}
}
public static boolean seckill(String itemId, String userId) {
if (!LOCKS.get(itemId)) {
// 商品秒杀锁未锁定
LOCKS.put(itemId, true);
try {
int stock = STOCKS.get(itemId);
if (stock > 0) {
// 商品库存充足
STOCKS.put(itemId, stock - 1);
System.out.println(userId + " 秒杀 " + itemId + " 成功!");
return true;
} else {
// 商品库存不足
System.out.println(userId + " 秒杀 " + itemId + " 失败:库存不足!");
return false;
}
} finally {
// 释放商品秒杀锁
LOCKS.put(itemId, false);
}
} else {
// 商品秒杀锁已锁定
System.out.println(userId + " 秒杀 " + itemId + " 失败:已被抢占!");
return false;
}
}
}
```
该程序使用了`java.util.concurrent.ConcurrentHashMap`类来存储商品库存和秒杀锁,保证了并发访问的线程安全性。`seckill`方法接受商品ID和用户ID作为参数,判断商品秒杀锁是否被锁定,如果未锁定,则尝试减少商品库存并输出秒杀成功信息,否则输出秒杀失败信息。最终返回是否秒杀成功的布尔值。
阅读全文