java线程池实现购买车票
时间: 2024-10-17 08:00:47 浏览: 25
在Java中,可以使用`java.util.concurrent`包下的ThreadPoolExecutor来实现线程池,用于并发地处理大量购车票请求。这里是一个简单的示例:
```java
import java.util.concurrent.*;
public class TicketBooking {
private ThreadPoolExecutor executor;
private final int MAX_THREADS = 5; // 线程池最大大小
public TicketBooking() {
// 创建固定大小的线程池
executor = new ThreadPoolExecutor(MAX_THREADS, MAX_THREADS,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(MAX_THREADS),
r -> new Thread(r, "TicketBooker"));
}
public void buyTicket(String ticketName) {
Runnable worker = () -> {
try {
System.out.println(Thread.currentThread().getName() + " is booking " + ticketName);
// 这里模拟购票操作,实际应用中应连接数据库或服务
bookTicketInternally(ticketName); // 转交实际购票逻辑
} catch (Exception e) {
e.printStackTrace();
}
};
// 提交任务到线程池
executor.execute(worker);
}
// 模拟内部购票逻辑
private void bookTicketInternally(String ticketName) {
// 实现具体的购票逻辑,如检查库存、付款等
// 如果票已售完或失败,可以抛出异常
}
public static void main(String[] args) {
TicketBooking ticketPool = new TicketBooking();
ticketPool.buyTicket("硬座");
ticketPool.buyTicket("软卧");
ticketPool.buyTicket("商务舱"); // 可同时处理多个请求
}
}
```
在这个例子中,我们创建了一个线程池来处理购票请求。当有新的购票请求时,会将它们包装成`Runnable`对象并提交给线程池。线程池中的线程会异步地执行这些任务,不会阻塞主线程。
阅读全文