使用JAVA,编写程序,实现多名网友用户抢购10张购物优惠券功能
时间: 2024-11-24 21:42:47 浏览: 14
在Java中,要实现多名网友用户抢购10张购物优惠券的功能,可以采用多线程并发处理和队列数据结构。这里是一个简化的示例:
```java
import java.util.concurrent.*;
class Coupon {
private int id;
private boolean isAvailable;
// 构造函数、getter和setter...
}
public class CouponRaffle {
private final Queue<Coupon> coupons = new LinkedList<>();
private int totalCoupons = 10;
public void addCoupon(Coupon coupon) {
if (coupon.isAvailable()) {
coupons.offer(coupon);
totalCoupons--;
} else {
System.out.println("优惠券已发放完毕");
}
}
public class User implements Runnable {
private final CouponRaffle raffle;
private final String name;
public User(CouponRaffle raffle, String name) {
this.raffle = raffle;
this.name = name;
}
@Override
public void run() {
while (!raffle.coupons.isEmpty() && raffle.totalCoupons > 0) {
try {
Thread.sleep(50); // 模拟用户请求速度
Coupon coupon = raffle.coupons.poll();
if (coupon.isAvailable()) {
System.out.printf("%s 抢到了第 %d 张优惠券%n", name, coupon.id);
coupon.setAvailable(false); // 设置已领取
} else {
System.out.println(name + " 抢购失败,优惠券已被其他人抢走");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
public void startRaffle(List<String> users) {
for (String user : users) {
new Thread(new User(this, user)).start();
}
}
}
// 示例用法
public static void main(String[] args) {
List<String> users = Arrays.asList("User1", "User2", "User3"); // 用户列表
CouponRaffle raffle = new CouponRaffle();
raffle.addCoupon(new Coupon(1)); // 添加优惠券到队列
raffle.addCoupon(new Coupon(2)); // ... 依此类推直到有10张
raffle.startRaffle(users);
}
```
这个例子中,`CouponRaffle`类管理优惠券队列,每个用户作为一个独立的`Thread`运行,尝试从队列中获取可用的优惠券。当优惠券被抢完或已经被其他用户领取,用户线程将退出循环。
阅读全文