java 买票 多线程_java多线程买票问题
时间: 2023-07-08 17:54:37 浏览: 265
好的,我了解这个问题。这是一个典型的并发编程问题,可以用Java多线程来解决。具体来说,可以创建一个继承自Thread类的TicketSeller类,每个TicketSeller实例代表一个售票窗口。在TicketSeller类中,可以定义一个静态变量ticketCount表示剩余的票数,每次售票时,可以使用synchronized关键字来保证线程安全。
以下是一个简单的示例代码:
```
public class TicketSeller extends Thread {
private static int ticketCount = 100; // 剩余票数
public TicketSeller(String name) {
super(name);
}
@Override
public void run() {
while (ticketCount > 0) {
synchronized (TicketSeller.class) {
if (ticketCount > 0) { // 确认还有票
System.out.println(getName() + "卖出了一张票,剩余" + (--ticketCount) + "张票");
}
}
try {
sleep(100); // 模拟售票时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 创建三个售票窗口
new TicketSeller("售票窗口1").start();
new TicketSeller("售票窗口2").start();
new TicketSeller("售票窗口3").start();
}
}
```
在main方法中,创建了三个售票窗口,每个窗口是一个TicketSeller线程,它们会并发地售票,直到售完为止。使用synchronized关键字来保证线程安全,确保在ticketCount变量的访问过程中不会发生竞争条件。
阅读全文