帮我写一个java的卖火车票的程序
时间: 2023-08-28 10:19:35 浏览: 159
java火车售票
好的,下面是一个简单的Java卖火车票的程序示例:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class TrainTicketSeller {
private int ticketCount; // 火车票数量
private final Lock lock = new ReentrantLock(); // 重入锁
public TrainTicketSeller(int ticketCount) {
this.ticketCount = ticketCount;
}
public void sellTicket(int count) {
lock.lock(); // 获取锁
try {
if (ticketCount >= count) { // 如果还有足够的火车票
System.out.println(Thread.currentThread().getName() + " 卖出 " + count + " 张火车票");
ticketCount -= count; // 更新火车票数量
} else { // 如果没有足够的火车票
System.out.println(Thread.currentThread().getName() + " 剩余 " + ticketCount + " 张火车票,无法卖出 " + count + " 张火车票");
}
} finally {
lock.unlock(); // 释放锁
}
}
public static void main(String[] args) {
TrainTicketSeller seller = new TrainTicketSeller(100); // 创建火车票售卖对象
Thread t1 = new Thread(() -> seller.sellTicket(1), "窗口1"); // 创建线程1
Thread t2 = new Thread(() -> seller.sellTicket(2), "窗口2"); // 创建线程2
Thread t3 = new Thread(() -> seller.sellTicket(3), "窗口3"); // 创建线程3
t1.start(); // 启动线程1
t2.start(); // 启动线程2
t3.start(); // 启动线程3
}
}
```
该程序中,TrainTicketSeller类表示火车票售卖对象,其中包含一个ticketCount属性表示火车票数量,以及一个sellTicket方法表示卖火车票的操作。在sellTicket方法中,使用ReentrantLock实现线程安全,并使用try-finally块确保锁的及时释放。在main方法中,创建三个线程模拟三个窗口卖火车票。
阅读全文