设计一个多线程程序,模拟火车售票窗口售票的功能。创建线程1和线程2,通过这两个线 程共同售出100张票。java
时间: 2024-06-13 11:03:59 浏览: 216
这个问题需要实现一个多线程程序,模拟火车售票窗口售票的功能。可以创建两个线程,每个线程负责售出50张票。在售票过程中,需要保证线程安全,即同一时间只能有一个线程在售票,避免出现多个线程售出同一张票的情况。可以使用synchronized关键字来实现线程同步。具体实现可以参考以下步骤:
1. 创建一个Ticket类,包含一个静态变量count表示剩余票数,以及一个sellTicket()方法用于售票。
2. 在sellTicket()方法中,使用synchronized关键字来保证线程安全,每次售票前先判断是否还有余票,如果有则将count减1,并输出售票信息。
3. 创建两个线程,每个线程分别调用Ticket类的sellTicket()方法售出50张票。
4. 在主函数中启动这两个线程,并等待它们执行完毕。
代码示例:
```
class Ticket {
private static int count = 100;
public synchronized static void sellTicket() {
if (count > 0) {
System.out.println(Thread.currentThread().getName() + "售出第" + (100 - count + 1) + "张票");
count--;
}
}
}
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 50; i++) {
Ticket.sellTicket();
}
}, "窗口1");
Thread t2 = new Thread(() -> {
for (int i = 0; i < 50; i++) {
Ticket.sellTicket();
}
}, "窗口2");
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
阅读全文