编写一个多线程程序,模拟火车售票窗口的售票功能,创建线程1和线程2,通过这两个线程共同出java
时间: 2023-10-25 19:15:21 浏览: 355
多线程设计一个火车售票模拟程序
好的,以下是一个简单的多线程程序,模拟火车售票窗口的售票功能,创建线程1和线程2,通过这两个线程共同出售火车票:
```java
public class TrainTicketWindow {
private static int ticketCount = 100; // 火车票数量
public static void main(String[] args) {
// 创建两个线程,模拟两个售票窗口
Thread t1 = new Thread(new TicketSeller(), "售票窗口1");
Thread t2 = new Thread(new TicketSeller(), "售票窗口2");
// 启动线程
t1.start();
t2.start();
}
// 售票员类
static class TicketSeller implements Runnable {
@Override
public void run() {
while (ticketCount > 0) { // 当还有火车票时
synchronized (this) { // 同步代码块,保证线程安全
if (ticketCount > 0) { // 再次判断是否有火车票
System.out.println(Thread.currentThread().getName() + "售出了第" + ticketCount + "张火车票");
ticketCount--; // 火车票数量减1
}
}
try {
Thread.sleep(100); // 线程休眠100毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
```
在上面的程序中,我们创建了一个 `TrainTicketWindow` 类,它包含了一个静态变量 `ticketCount`,表示火车票的数量。然后,我们创建了一个内部类 `TicketSeller`,它实现了 `Runnable` 接口,表示售票员。在 `TicketSeller` 类的 `run()` 方法中,我们使用了一个 `while` 循环,不断地售出火车票,直到火车票全部售完。在每次售票时,我们使用了一个同步代码块,保证了线程的安全性,避免了出现多个线程同时售出同一张火车票的情况。最后,在每次售票后,我们使用了 `Thread.sleep()` 方法,让线程休眠100毫秒,模拟售票员操作的时间。
阅读全文