使用5个线程模拟5个售票窗口,共同卖出10000张票(1号至1万号); 要求: 1:数据不能出现重复和超出范围的票号;
时间: 2024-02-18 17:04:10 浏览: 146
好的,这是一个多线程编程问题。下面是一种实现方式:
```java
public class Ticket implements Runnable {
private static int ticketNum = 10000;
private static int count = 0;
private static Object lock = new Object();
@Override
public void run() {
while (true) {
synchronized (lock) {
if (ticketNum > 0) {
count++;
int currentTicketNum = ticketNum;
ticketNum--;
System.out.println(Thread.currentThread().getName() + "售出第" + currentTicketNum + "张票");
} else {
break;
}
}
}
System.out.println(Thread.currentThread().getName() + "共售出" + count + "张票");
}
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(ticket, "窗口1").start();
new Thread(ticket, "窗口2").start();
new Thread(ticket, "窗口3").start();
new Thread(ticket, "窗口4").start();
new Thread(ticket, "窗口5").start();
}
}
```
使用一个静态变量ticketNum来表示售票的总数,每个线程在卖票时都要对该变量进行操作。为了防止多个线程同时对该变量进行修改导致数据出错,我们使用一个锁对象lock进行同步控制。每个线程在卖票时都要获取该锁对象,确保同一时间只有一个线程在卖票。同时,使用一个静态变量count来统计每个窗口售出的票数,最后输出卖票总数。
以上代码能够实现多线程卖票并且保证数据不重复和不超出范围。
阅读全文