火车站总票数200张,编写程序实现三个售票点同时卖票的功能 java程序
时间: 2023-12-09 13:03:28 浏览: 71
好的,以下是 Java 版本的程序代码实现:
```java
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SellTickets {
private static int totalTickets = 200;
private static Lock lock = new ReentrantLock();
public static void main(String[] args) {
Thread window1 = new Thread(new TicketSeller("窗口1", 2));
Thread window2 = new Thread(new TicketSeller("窗口2", 3));
Thread window3 = new Thread(new TicketSeller("窗口3", 4));
window1.start();
window2.start();
window3.start();
try {
window1.join();
window2.join();
window3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("售票结束!");
}
static class TicketSeller implements Runnable {
private String window;
private int num;
public TicketSeller(String window, int num) {
this.window = window;
this.num = num;
}
public void run() {
while (true) {
lock.lock(); // 加锁
if (totalTickets >= num) {
totalTickets -= num;
System.out.println(window + " 售出 " + num + " 张票,还剩 " + totalTickets + " 张票");
lock.unlock(); // 解锁
} else {
System.out.println(window + " 票已售罄!");
lock.unlock(); // 解锁
break; // 结束循环
}
}
}
}
}
```
该程序使用了 Java 中的 `Lock` 接口和 `ReentrantLock` 实现类,创建了三个售票窗口线程,每个窗口同时售出指定数量的票,直到票全部售完。为了保证线程安全,使用了 `ReentrantLock` 对象进行加锁和解锁。最后输出售票结束的提示。
请注意,该程序仅供学习参考使用,实际使用时可能需要根据具体情况进行适当调整。
阅读全文