java实现多线程买票
时间: 2023-06-29 07:16:09 浏览: 118
好的,以下是Java实现多线程买票的示例代码:
```java
public class Ticket implements Runnable {
// 总票数
private int totalTickets;
// 当前售出票数
private int soldTickets = 0;
public Ticket(int totalTickets) {
this.totalTickets = totalTickets;
}
public void run() {
while (true) {
synchronized (this) {
if (soldTickets < totalTickets) {
// 如果还有票就卖出去一张
soldTickets++;
System.out.println(Thread.currentThread().getName() + " 卖出了第 " + soldTickets + " 张票");
} else {
// 否则提示售罄并退出循环
System.out.println("票已售罄," + Thread.currentThread().getName() + " 退出售票");
break;
}
}
}
}
public static void main(String[] args) {
// 总票数
int totalTickets = 20;
// 创建售票对象
Ticket ticket = new Ticket(totalTickets);
// 创建多个线程模拟售票
Thread t1 = new Thread(ticket, "售票口1");
Thread t2 = new Thread(ticket, "售票口2");
Thread t3 = new Thread(ticket, "售票口3");
// 启动线程
t1.start();
t2.start();
t3.start();
}
}
```
以上代码中,我们使用了 synchronized 来保证线程安全,每个线程在卖票时都会先获取到对象锁,然后判断是否还有票可以卖,如果有就卖出去一张,并更新售出票数;如果已经售罄,就提示售罄并退出循环。同时,我们使用了 Runnable 接口来实现多线程,创建多个线程并启动它们。
注意:以上代码只是一个简单的示例,实际中需要根据具体情况进行适当的修改和优化。
阅读全文