设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 2、各售票点不能售出相同票号的火车票,用Java
时间: 2024-05-10 12:18:13 浏览: 76
下面是一个基本的多线程火车售票模拟程序:
```java
public class TicketSalesSimulator implements Runnable {
private static int tickets = 100; // 总票数
private static int count = 1; // 已售票数
private static Object lock = new Object(); // 锁对象,用于同步访问tickets和count
private int id; // 售票点编号
public TicketSalesSimulator(int id) {
this.id = id;
}
@Override
public void run() {
while (count <= tickets) {
synchronized (lock) {
if (count <= tickets) { // 还有票卖
System.out.println("售票点" + id + "售出第" + count + "张票");
count++;
}
}
try {
Thread.sleep(100); // 模拟售票过程中的耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
new Thread(new TicketSalesSimulator(i)).start();
}
}
}
```
在上面的程序中,我们定义了一个静态变量`tickets`表示总票数,一个静态变量`count`表示已售票数,还有一个静态的`lock`对象作为锁,用于同步访问`tickets`和`count`。每个售票点用一个实例表示,售票点的编号从1到5。`run()`方法中使用`synchronized`关键字同步访问`lock`对象,保证多个线程在访问`tickets`和`count`时的同步性。每个售票点在售完一张票后,通过`Thread.sleep(100)`模拟售票过程中的耗时操作。在`main()`方法中,我们创建了5个线程,分别表示5个售票点,并启动这些线程。运行该程序,可以看到每个售票点所卖出的票号,而且每个售票点所卖出的票号互不相同,符合要求。
阅读全文