java线程池实现购买车票、并实现车票减少
时间: 2024-10-17 19:14:14 浏览: 8
在Java中,我们可以使用ThreadPoolExecutor来创建一个线程池,用于并发处理购票请求。这里简单描述一下如何实现这个场景:
1. **创建线程池**:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
ExecutorService executor = Executors.newFixedThreadPool(10); // 创建固定大小的线程池,最多10个线程
```
2. **定义任务** (模拟车票购买函数):
```java
Runnable buyTicketTask = new Runnable() {
int ticketCount; // 车票数量
@Override
public void run() {
if (ticketCount > 0) {
System.out.println(Thread.currentThread().getName() + "正在购买车票...");
ticketCount--;
// 模拟购票操作,例如数据库操作或其他耗时逻辑
} else {
System.out.println(Thread.currentThread().getName() + "已无票可买!");
}
}
};
```
3. **提交任务到线程池**:
```java
for (int i = 0; i < 50; i++) { // 模拟50个用户同时请求购车票
executor.execute(buyTicketTask);
}
```
4. **关闭线程池**:
```java
executor.shutdown(); // 当所有任务完成后关闭线程池
while (!executor.isTerminated()) {} // 等待所有任务完成
System.out.println("所有购票操作已完成");
```
在这个例子中,当有多个任务同时请求购票时,线程池会动态分配线程来执行。由于`run()`方法里包含车票减少的操作,所以每次任务运行都会检查是否有足够的票,并相应地减少库存。
阅读全文